2011-12-06 9 views
6

Estoy evaluando MongoDB, viniendo de Membased/memcached porque quiero más flexibilidad.¿Es mongoDB eficiente al realizar búsquedas de múltiples claves?

Por supuesto, Membase es excelente para hacer búsquedas rápidas (multi) de claves.

Me gustan las opciones adicionales que me ofrece MongoDB, pero ¿también es rápido para realizar búsquedas con varias teclas? He visto el operador $ o y $ in y estoy seguro de que puedo modelarlo con eso. Solo quiero saber si está funcionando (en la misma liga) que Membase.

caso de uso, por ejemplo, Lucene/Solr devuelve 20 identificadores de productos. Busque estos ID de productos en Couchdb para devolver documentos/campos apropiados.

Gracias, Geert-Jan

Respuesta

3

Para su caso de uso, diría que es, según mi experiencia: pirateé algunas analíticas en una base de datos mía que hizo un montón de consultas $in con miles de ids y funcionó bien (era un truco) . Para mi sorpresa, funcionó bastante bien, en el área inferior de milisegundos.

Por supuesto, es difícil comparar esto y, como es habitual, la teoría es un mal compañero cuando se trata del rendimiento. Supongo que la mejor manera de resolverlo es migrar algunos datos de prueba y enviar algunas consultas al sistema.

Utilice el excelente generador de perfiles integrado de MongoDB, use $explain, tenga en cuenta el índice único por regla de consulta, eche un vistazo a los registros, vigile el mongostato y realice algunos puntos de referencia. Esto no debería tomar demasiado tiempo y darte una respuesta definitiva y afirmativa. Si sus consultas resultan lentas, las personas aquí y en el grupo de noticias probablemente tengan algunas ideas sobre cómo mejorar la consulta exacta o la indexación.

+0

Ok, voy a echar un vistazo. Excavando un poco, parece que Mongo-DB usa B-trees debajo de la cubierta para sus índices, lo que significa que buscar x productos en la clave primaria probablemente cueste O (x * log N) (en lugar de la complejidad O (x) para Membase basado en hashtrees/tablas) ... Si el índice está en mem, esto es probablemente negligetable para mi caso de uso. Gracias –

1

Un índice por consulta. A veces se piensa que las consultas en múltiples claves pueden usar múltiples índices; este no es el caso con MongoDB. Si tiene una consulta que selecciona en varias claves, y desea que la consulta use un índice de manera eficiente, entonces es necesario un índice de clave compuesta .

http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Oneindexperquery.

También hay más información en esa página con respecto a los Índices.

La conclusión es que Mongo será genial si sus índices están en la memoria y está indexando en las columnas que desea consultar utilizando claves compuestas. Si tiene una indexación deficiente, su rendimiento sufrirá como resultado. Esto está más o menos en línea con la mayoría de los sistemas.

+0

Multikey! = Índices múltiples – mnemosyn

+0

No, no, pero se relaciona directamente con su pregunta. Si espera consultar en varias columnas sin crear claves compuestas, entonces el rendimiento sufrirá. Si está dispuesto a pasar el tiempo para indexar correctamente, entonces Mongo será suficiente. – methodin

+0

Entiendo el 'mantra de un índice por consulta', ya que se refiere a crear claves compuestas, por lo que solo necesita un índice para consultar. Este caso de uso particular no necesita índices compuestos, etc. Solo tengo unos 10 millones de documentos (productos) cada uno con un producto único. Deseo saber si hacer una consulta como '$ in (, , )' es eficiente, con el caso especial de que productid es la clave primaria. Entonces, habrá 1 índice que cubra mi consulta.Tal vez estoy siendo excesivamente entusiasta, pero tengo un cuidado extra cuando veo algo que se parece a la cláusula SQL IN cuando se habla de rendimiento. –

Cuestiones relacionadas