MySQL против MongoDB 1000 чтений

Я был очень взволнован MongoDb и тестировал его в последнее время. У меня была таблица с сообщениями в MySQL с примерно 20 миллионами записей, проиндексированных только по полю с именем «id».

Я хотел сравнить скорость с MongoDB и провел тест, который случайным образом получал и печатал 15 записей из наших огромных баз данных. Я выполнил запрос примерно по 1000 раз для mysql и MongoDB, и я удивлен, что не заметил большой разницы в скорости. Возможно, MongoDB в 1,1 раза быстрее. Это очень разочаровывает. Есть ли что-то, что я делаю неправильно? Я знаю, что мои тесты не идеальны, но MySQL не уступает MongoDb, когда дело доходит до интенсивного чтения.


Примечание:

  • У меня двухъядерный + (2 потока) процессор i7 и 4 ГБ оперативной памяти
  • У меня 20 разделов в MySQL, каждый из 1 миллиона записей

Пример кода, используемый для тестирования MongoDB

<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_taken = 0;
$tries = 100;
// connect
$time_start = microtime_float();

for($i=1;$i<=$tries;$i++)
{
    $m = new Mongo();
    $db = $m->swalif;
    $cursor = $db->posts->find(array('id' => array('$in' => get_15_random_numbers())));
    foreach ($cursor as $obj)
    {
        //echo $obj["thread_title"] . "<br><Br>";
    }
}

$time_end = microtime_float();
$time_taken = $time_taken + ($time_end - $time_start);
echo $time_taken;

function get_15_random_numbers()
{
    $numbers = array();
    for($i=1;$i<=15;$i++)
    {
        $numbers[] = mt_rand(1, 20000000) ;

    }
    return $numbers;
}

?>


Пример кода Для тестирования MySQL

<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$BASE_PATH = "../src/";
include_once($BASE_PATH  . "classes/forumdb.php");

$time_taken = 0;
$tries = 100;
$time_start = microtime_float();
for($i=1;$i<=$tries;$i++)
{
    $db = new AQLDatabase();
    $sql = "select * from posts_really_big where id in (".implode(',',get_15_random_numbers()).")";
    $result = $db->executeSQL($sql);
    while ($row = mysql_fetch_array($result) )
    {
        //echo $row["thread_title"] . "<br><Br>";
    }
}
$time_end = microtime_float();
$time_taken = $time_taken + ($time_end - $time_start);
echo $time_taken;

function get_15_random_numbers()
{
    $numbers = array();
    for($i=1;$i<=15;$i++)
    {
        $numbers[] = mt_rand(1, 20000000);

    }
    return $numbers;
}
?>
305
задан informatik01 26 July 2015 в 09:15
поделиться