2010-03-17 5 views
7

J'ai récemment fait des recherches sur les options nosql disponibles pour .NET et MongoDB est en train de devenir un gagnant clair en termes de disponibilité et de support, alors ce soir j'ai décidé d'essayer. J'ai téléchargé la version 1.2.4 (Windows x64 binaire) à partir du site MongoDB et il a couru avec les options suivantes:Performances Mongodb sous Windows

C:\mongodb\bin>mkdir data 
C:\mongodb\bin>mongod -dbpath ./data --cpu --quiet 

Je me suis alors chargé le dernier pilote mongodb-csharp de http://github.com/samus/mongodb-csharp et immédiatement couru le programme de référence. Ayant entendu à quel point MongoDB est "incroyablement rapide", j'ai été plutôt choqué par la piètre performance de l'indice de référence.

Starting Tests 
encode (small).........................................320000 00:00:00.0156250 
encode (medium)........................................80000 00:00:00.0625000 
encode (large).........................................1818 00:00:02.7500000 
decode (small).........................................320000 00:00:00.0156250 
decode (medium)........................................160000 00:00:00.0312500 
decode (large).........................................2370 00:00:02.1093750 
insert (small, no index)...............................2176 00:00:02.2968750 
insert (medium, no index)..............................2269 00:00:02.2031250 
insert (large, no index)...............................778 00:00:06.4218750 
insert (small, indexed)................................2051 00:00:02.4375000 
insert (medium, indexed)...............................2133 00:00:02.3437500 
insert (large, indexed)................................835 00:00:05.9843750 
batch insert (small, no index).........................53333 00:00:00.0937500 
batch insert (medium, no index)........................26666 00:00:00.1875000 
batch insert (large, no index).........................1114 00:00:04.4843750 
find_one (small, no index).............................350 00:00:14.2812500 
find_one (medium, no index)............................204 00:00:24.4687500 
find_one (large, no index).............................135 00:00:37.0156250 
find_one (small, indexed)..............................352 00:00:14.1718750 
find_one (medium, indexed).............................184 00:00:27.0937500 
find_one (large, indexed)..............................128 00:00:38.9062500 
find (small, no index).................................516 00:00:09.6718750 
find (medium, no index)................................316 00:00:15.7812500 
find (large, no index).................................216 00:00:23.0468750 
find (small, indexed)..................................532 00:00:09.3906250 
find (medium, indexed).................................346 00:00:14.4375000 
find (large, indexed)..................................212 00:00:23.5468750 
find range (small, indexed)............................440 00:00:11.3593750 
find range (medium, indexed)...........................294 00:00:16.9531250 
find range (large, indexed)............................199 00:00:25.0625000 
Press any key to continue... 

Pour commencer, je peux obtenir de meilleures performances d'insertion non-batch à partir de SQL Server Express. Ce qui m'a vraiment frappé, cependant, était la lenteur des requêtes find_nnnn. Pourquoi la récupération des données de MongoDB est-elle si lente? Qu'est-ce que je rate?

Modifier: Tout était sur la machine locale, pas de latence réseau ou quoi que ce soit. L'utilisation du processeur de MongoDB a été d'environ 75% pendant toute la durée du test. En outre, j'ai exécuté une trace sur le programme de test de performances et confirmé que 50% du temps processeur attendait que MongoDB renvoie des données, donc ce n'est pas un problème de performances avec le pilote C#.

Répondre

9

J'ai également exécuté ce benchmark. Ce morceau de code a beaucoup de bugs. La création de l'index par exemple échoue mais l'exception est avalée, donc la recherche est toujours lente.

Mais sachez aussi que l'objet volumineux comporte beaucoup d '"objets de détail". C'est une hiérarchie, pas un seul enregistrement. Un document contient 280 'enregistrements' détaillés. Il est injuste de comparer un tel document avec une ligne d'une table rdbms comme le serveur SQL.

0

Ceci est atypique. Combien de RAM avez-vous sur cette boîte? Qu'est-ce que le top show montre quand les tests sont en cours? Sur mon ordinateur portable, je peux facilement obtenir des chiffres beaucoup plus élevés que cela sans le processus mongod réel, même une sueur.