ฉันตื่นเต้นเป็นอย่างมากกับ MongoDb และได้ทำการทดสอบเมื่อไม่นานมานี้ ฉันมีตารางที่เรียกว่าโพสต์ใน MySQL ที่มีประมาณ 20 ล้านบันทึกการจัดทำดัชนีเฉพาะในเขตข้อมูลที่เรียกว่า 'id'
ฉันต้องการเปรียบเทียบความเร็วกับ MongoDB และฉันทดสอบซึ่งจะได้รับและพิมพ์ 15 รายการแบบสุ่มจากฐานข้อมูลขนาดใหญ่ของเรา ฉันใช้แบบสอบถามประมาณ 1,000 ครั้งสำหรับ mysql และ MongoDB และฉันประหลาดใจที่ฉันไม่ได้สังเกตเห็นความแตกต่างของความเร็ว บางที MongoDB อาจเร็วขึ้น 1.1 เท่า มันน่าผิดหวังมาก มีบางอย่างที่ฉันทำผิดหรือเปล่า? ฉันรู้ว่าการทดสอบของฉันไม่สมบูรณ์แบบ แต่ MySQL นั้นเทียบเท่ากับ MongoDb เมื่อพูดถึงการอ่านงานบ้านที่เข้มข้น
บันทึก:
- ฉันมี dual core + (2 กระทู้) i7 cpu และ 4GB ram
- ฉันมีพาร์ติชั่นบน MySQL จำนวน 20 พาร์ทิชั่นหนึ่งล้านเรคคอร์ด
โค้ดตัวอย่างที่ใช้สำหรับการทดสอบ 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;
}
?>