Tôi đã rất hào hứng với MongoDb và đã thử nghiệm nó gần đây. Tôi đã có một bảng được gọi là các bài đăng trong MySQL với khoảng 20 triệu bản ghi chỉ được lập chỉ mục trên một trường có tên là 'id'.
Tôi muốn so sánh tốc độ với MongoDB và tôi đã chạy thử nghiệm có thể lấy và in 15 bản ghi ngẫu nhiên từ cơ sở dữ liệu khổng lồ của chúng tôi. Tôi đã chạy truy vấn khoảng 1.000 lần mỗi lần cho mysql và MongoDB và tôi cho rằng tôi không nhận thấy nhiều sự khác biệt về tốc độ. Có thể MongoDB nhanh hơn 1,1 lần. Điều đó thật đáng thất vọng. Có điều gì tôi đang làm sai? Tôi biết rằng các bài kiểm tra của tôi không hoàn hảo nhưng MySQL ngang bằng với MongoDb khi đọc các công việc chuyên sâu.
Ghi chú:
- Tôi có lõi kép + (2 luồng) i7 cpu và 4GB ram
- Tôi có 20 phân vùng trên MySQL mỗi 1 triệu bản ghi
Mã mẫu được sử dụng để kiểm tra 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;
}
?>
Mã mẫu để kiểm tra 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;
}
?>