J'ai été très excité à propos de MongoDb et ont pu tester ces derniers temps. J'ai eu une table posts dans MySql avec environ s'élevant à 20 millions d'enregistrements indexés uniquement sur un champ 'id'.
J'ai voulu comparer la vitesse avec MongoDb et j'ai couru un test qui permettrait d'obtenir et d'imprimer des 15 dossiers au hasard à partir de nos bases de données énormes. J'ai couru à la requête d'environ 1 000 fois chacun pour mysql et mongodb et je suis surpised que je ne remarque pas beaucoup de différence dans la vitesse. Peut-être Monogodb est de 1,1 fois plus rapide. C'est très décevant. Est-il quelque chose que je fais mal? Je sais que mes tests ne sont pas parfaites mais MySQL est sur le pair avec MongoDb quand il s'agit de lecture intensive des tâches ménagères.
Note:
- J'ai dual core + ( 2 threads ) i7 et 4 go de ram
- J'ai 20 partitions sur mysql chacune de 1 million d'enregistrements
Exemple De Code Utilisé Pour Les Tests De 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;
}
?>
Exemple de Code Pour le Test 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;
}
?>