Saya sangat senang tentang MongoDb dan telah mengujinya akhir-akhir ini. Saya memiliki tabel yang disebut posting di MySQL dengan sekitar 20 juta catatan diindeks hanya pada bidang yang disebut 'id'.
Saya ingin membandingkan kecepatan dengan MongoDB dan saya menjalankan tes yang akan mendapatkan dan mencetak 15 catatan secara acak dari database besar kami. Saya menjalankan kueri masing-masing sekitar 1.000 kali untuk mysql dan MongoDB dan saya terkejut bahwa saya tidak melihat banyak perbedaan dalam kecepatan. Mungkin MongoDB adalah 1,1 kali lebih cepat. Itu sangat mengecewakan. Apakah ada yang salah yang saya lakukan? Saya tahu bahwa tes saya tidak sempurna tetapi MySQL setara dengan MongoDb ketika datang untuk membaca tugas-tugas intensif.
catatan:
- Saya memiliki dual core + (2 thread) i7 cpu dan ram 4GB
- Saya memiliki 20 partisi di MySQL masing-masing dari 1 juta catatan
Kode Sampel Digunakan Untuk Menguji 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;
}
?>
Contoh Kode Untuk Menguji 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;
}
?>