আমি মঙ্গোডিবি সম্পর্কে খুব উচ্ছ্বসিত এবং ইদানীং এটি পরীক্ষা করে দেখছি। আমার কাছে মাইএসকিউএলে পোস্ট নামক একটি টেবিল ছিল যেখানে কেবল 'আইডি' নামক একটি ক্ষেত্রের প্রায় 20 মিলিয়ন রেকর্ড সূচিযুক্ত।
আমি মঙ্গোডিবিয়ের সাথে গতির তুলনা করতে চেয়েছিলাম এবং আমি একটি পরীক্ষা চালিয়েছিলাম যা আমাদের বিশাল ডাটাবেসগুলি থেকে এলোমেলোভাবে 15 টি রেকর্ড মুদ্রণ করে মুদ্রণ করতে পারে। আমি মাইএসকিএল এবং মঙ্গোডিবি-র জন্য প্রায় এক হাজার বার ক্যোয়ারী চালিয়েছি এবং আমি অবাক হয়েছি যে গতির মধ্যে আমি খুব বেশি পার্থক্য লক্ষ্য করি না। হতে পারে মঙ্গোডিবি 1.1 গুণ বেশি দ্রুত। এটা খুব হতাশাজনক। আমি কি কিছু ভুল করছি? আমি জানি যে আমার পরীক্ষাগুলি নিখুঁত নয় তবে মন্টোডিবি'র সমতুল্য মাইএসকিউএল যখন এটি নিবিড় কাজগুলি পড়ার বিষয়টি আসে।
বিঃদ্রঃ:
- আমার ডুয়াল কোর + (2 থ্রেড) আই 7 সিপিইউ এবং 4 জিবি র্যাম রয়েছে
- আমার 1 মিলিয়ন রেকর্ডের প্রতিটি মাইএসকিউএলে 20 টি পার্টিশন রয়েছে
মংগোডিবি পরীক্ষার জন্য ব্যবহৃত নমুনা কোড
<?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;
}
?>
মাইএসকিউএল পরীক্ষার জন্য নমুনা কোড
<?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;
}
?>