2010-03-17 22 views
7

He estado investigando las opciones nosql disponibles para .NET últimamente y MongoDB está emergiendo como un claro ganador en términos de disponibilidad y soporte, así que esta noche decidí probarlo. He descargado la versión 1.2.4 (Windows de 64 bits binarios) del sitio mongodb y corrió con las siguientes opciones:Rendimiento de Mongodb en Windows

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

continuación Cargué el controlador más reciente mongodb-CSharp de http://github.com/samus/mongodb-csharp e inmediatamente corrió el programa de referencia. Habiendo escuchado acerca de lo increíblemente rápido que es MongoDB, me sorprendió el pobre desempeño de referencia.

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... 

Para empezar, puedo obtener un mejor rendimiento de inserción no por lotes de SQL Server Express. Lo que realmente me llamó la atención, sin embargo, fue el lento rendimiento de las consultas de find_nnnn. ¿Por qué la recuperación de datos de MongoDB es tan lenta? ¿Qué me estoy perdiendo?

Editar: Todo esto estaba en la máquina local, sin latencia de red ni nada. El uso de la CPU de MongoDB corría alrededor del 75% durante todo el tiempo que se ejecutó la prueba. Además, rastreé el programa de referencia y confirmé que el 50% del tiempo de CPU consumido estaba esperando que MongoDB devolviera los datos, por lo que no es un problema de rendimiento con el controlador C#.

Respuesta

9

También ejecuté ese punto de referencia. Esa pieza de código tiene muchos errores. La creación del índice, por ejemplo, falla pero la excepción se traga, por lo que la búsqueda aún es lenta.

Pero también tenga en cuenta que el objeto grande tiene una gran cantidad de "objetos de detalle". Es una jerarquía, no un solo registro. Un documento tiene 280 'registros' de detalle. No es justo comparar un documento tan grande con una fila de una tabla rdbms como el servidor sql.

0

Esto es atípico. ¿Cuánta RAM tienes en esa caja? ¿Qué muestra la parte superior a medida que se ejecutan las pruebas? En mi computadora portátil puedo obtener fácilmente números mucho más altos que este sin el proceso real de mongod, incluso rompiendo a sudar.

Cuestiones relacionadas