J'essaye d'écrire un php benchmark
afin de comparer certains RDBMS, NewSQL et NoSQL. Ce script exécute simplement des requêtes et mesure le temps d'exécution.mysql_query équivalent à mongoDB
Pour MySQL comme, j'utilise simplement:
$start = microtime(true);
$result = mysql_query($SQL);
$end = microtime(true);
Je ne l'ai pas récupérer les données de mon indice de référence.
Mais avec MongoDB-php, fonction find()
renvoie une cursor
$start = microtime(true);
$collection = $this->_db->selectCollection($collection);
$cursor = $collection->find($query);
$end = microtime(true);
Est-ce que $cursor
et $result
sont équivalent (temps/coût des données)? Le curseur ne charge pas les données, je dois itérer le curseur afin de charger les données .. C'est pourquoi le temps d'exécution des requêtes entre MySQL et mongoDB est si différent ou juste mongoDB ...
Je me demande si ce serait plus juste changer mon code pour:
$start = microtime(true);
$result = mysql_query($SQL);
while ($row = mysql_fetch_row($result)) {}
$end = microtime(true);
et
$start = microtime(true);
$cursor = $collection->find($query);
foreach ($cursor as $doc) {}
$end = microtime(true);
et enfin, est-il vrai de dire que chaque fois que vous itérer sur MongoDB données du curseur sont chercher directement à partir du serveur MongoDB et non de la mémoire de l'ordinateur?
Ok merci, vous avez raison. Mais pensez-vous que ma façon de faire est bonne? Ou il y a une autre solution que je n'ai pas pensée? Ex: utilisez MongoDB :: execute? – Kakawait
Exécuter n'est pas conçu pour exécuter des requêtes, juste pour exécuter du javascript arbitraire. Je n'ai jamais eu à utiliser ça jusqu'à présent. La meilleure chose pour l'analyse comparative serait d'avoir une application réelle, ou peut-être faire des tests d'insertion. – Derick
Oui, pour mon exemple j'ai choisi select query .. Mais mon benchmark va exécuter de nombreux types de requête différents (select, insert, update etc ...) sur une application pseudo-réelle. Mais mon problème est juste à propos de select parce que mongodb utilise le curseur. – Kakawait