Con el movimiento de NoSQL creciendo en base a bases de datos basadas en documentos, he visto MongoDB últimamente. He notado una sorprendente similitud con la forma de tratar los elementos como "Documentos", al igual que Lucene (y los usuarios de Solr).
Entonces, la pregunta: ¿Por qué querrías usar NoSQL (MongoDB, Cassandra, CouchDB, etc.) sobre Lucene (o Solr) como tu "base de datos"?
Lo que estoy buscando (y estoy seguro de que otros están buscando) en una respuesta son algunas comparaciones profundas de ellos. Pasemos por alto todas las discusiones de bases de datos relacionales, ya que tienen un propósito diferente.
Lucene ofrece algunas ventajas serias, como potentes sistemas de búsqueda y peso. Sin mencionar las facetas en Solr (que Solr se está integrando en Lucene pronto, ¡yay!). Puede utilizar documentos de Lucene para almacenar ID y acceder a los documentos como tal, como MongoDB. Combínelo con Solr, y ahora obtendrá una solución de carga equilibrada basada en WebService.
Incluso puede incluir una comparación de proveedores de caché fuera de proceso, como Velocity o MemCached cuando se habla de almacenamiento de datos y escalabilidad similares de MongoDB.
Las restricciones en torno a MongoDB me recuerdan el uso de MemCached, pero puedo usar Velocity de Microsoft y tener más poder de agrupación y recopilación de listas sobre MongoDB (creo). No puede ser más rápido o escalable que el almacenamiento en caché de datos en la memoria. Incluso Lucene tiene un proveedor de memoria.
MongoDB (y otros) tienen algunas ventajas, como la facilidad de uso de su API. Renueve un documento, cree una identificación y guárdelo. Hecho. Bonito y fácil.
Respuestas:
Esta es una gran pregunta, algo en lo que he reflexionado bastante. Resumiré mis lecciones aprendidas:
Puede usar Lucene / Solr fácilmente en lugar de MongoDB para casi todas las situaciones, pero no al revés. La publicación de Grant Ingersoll lo resume aquí.
MongoDB, etc. parece servir para un propósito donde no hay requisitos de búsqueda y / o facetado. Parece ser una transición más simple y posiblemente más fácil para los programadores que se desintoxican del mundo RDBMS. A menos que uno esté acostumbrado, Lucene y Solr tienen una curva de aprendizaje más pronunciada.
No hay muchos ejemplos del uso de Lucene / Solr como un almacén de datos, pero Guardian ha avanzado un poco y resume esto en una excelente plataforma de diapositivas , pero tampoco se comprometen a saltar totalmente en el carro de Solr e "investigar" combinar Solr con CouchDB.
Finalmente, ofreceré nuestra experiencia, desafortunadamente no puedo revelar mucho sobre el caso de negocios. Trabajamos en la escala de varios TB de datos, una aplicación casi en tiempo real. Después de investigar varias combinaciones, decidió quedarse con Solr. Sin remordimientos hasta el momento (6 meses y contando) y no veo ninguna razón para cambiar a otro.
Resumen: si no tiene un requisito de búsqueda, Mongo ofrece un enfoque simple y poderoso. Sin embargo, si la búsqueda es clave para su oferta, es probable que sea mejor atenerse a una tecnología (Solr / Lucene) y optimizarla al máximo: menos partes móviles.
Mis 2 centavos, espero que haya ayudado.
fuente
No puede actualizar parcialmente un documento en solr. Debe volver a publicar todos los campos para actualizar un documento.
Y el rendimiento importa. Si no se compromete, su cambio a solr no tendrá efecto, si se compromete cada vez, el rendimiento se ve afectado.
No hay transacción en solr.
Como solr tiene estas desventajas, algunas veces nosql es una mejor opción.
fuente
Usamos MongoDB y Solr juntos y funcionan bien. Puede encontrar mi blog aquí donde describí cómo utilizamos estas tecnologías juntas. Aquí hay un extracto:
fuente
También tenga en cuenta que algunas personas han integrado Solr / Lucene en Mongo al tener todos los índices almacenados en Solr y también monitoreando las operaciones de oplog y conectando actualizaciones relevantes en cascada en Solr.
Con este enfoque híbrido, realmente puede tener lo mejor de ambos mundos con capacidades tales como búsqueda de texto completo y lecturas rápidas con un almacén de datos confiable que también puede tener una velocidad de escritura increíble.
Es un poco técnico de configurar, pero hay muchos tailers oplog que pueden integrarse en solr. Mira lo que hizo rangepan en este artículo.
http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html
fuente
Desde mi experiencia con ambos, Mongo es ideal para un uso simple y directo. La principal desventaja de Mongo que hemos sufrido es el bajo rendimiento en consultas no anticipadas (no puede crear índices de mongo para todas las combinaciones posibles de filtro / clasificación, simplemente no puede).
Y aquí, donde Lucene / Solr prevalece a lo grande, especialmente con el almacenamiento en caché FilterQuery, el rendimiento es excepcional.
fuente
Como nadie más lo mencionó, permítanme agregar que MongoDB no tiene esquema, mientras que Solr aplica un esquema. Por lo tanto, si es probable que los campos de sus documentos cambien, esa es una razón para elegir MongoDB sobre Solr.
fuente
schema.xml
PERO también tiene 'campos dinámicos', es decir, campos cuyos tipos se determinan mediante comodines, por lo que puede hacer que todos los campos coincidan, digamos,*_i
indexados como campos enteros. al agregar documentos, a continuación, puede tener documentos conaining campos comocount_i
,foo_i
,bar_i
que son todos entendida como campos enteros sin aparecer enschema.xml
forma literal. bastante sin esquema, diría. ver youtube.com/watch?v=WYVM6Wz-XTw para más información.@ mauricio-scheffer mencionó Solr 4: para aquellos interesados en eso, LucidWorks está describiendo Solr 4 como "el servidor de búsqueda NoSQL" y hay un video en http://www.lucidworks.com/webinar-solr-4-the-nosql -search-server / donde entran en detalles sobre las características de NoSQL (ish). (El -ish es para su versión de schemaless que en realidad es un esquema dinámico).
fuente
Si solo desea almacenar datos utilizando el formato de valor clave, no se recomienda Lucene porque su índice invertido desperdiciará demasiado espacio en disco. Y con el ahorro de datos en el disco, su rendimiento es mucho más lento que las bases de datos NoSQL como redis porque redis guarda datos en RAM. La mayor ventaja para Lucene es que admite muchas consultas, por lo que se pueden admitir consultas difusas.
fuente
Las soluciones de terceros, como un mongo op-log tail son atractivas. Quedan algunos pensamientos o preguntas sobre si las soluciones podrían integrarse estrechamente, asumiendo una perspectiva de desarrollo / arquitectura. No espero ver una solución estrechamente integrada para estas características por algunas razones (algo especulativas y sujetas a aclaraciones y no actualizadas con los esfuerzos de desarrollo):
fuente
MongoDB Atlas tendrá un motor de búsqueda basado en lucene pronto. El gran anuncio se hizo en la conferencia MongoDB World 2019 de esta semana. Esta es una excelente manera de alentar un mayor uso de su producto Atlas MongoDB de altos ingresos.
Esperaba verlo en la versión 4.2 de MongoDB Enterprise, pero no ha habido noticias de llevarlo a su línea de productos local.
Más información aquí: https://www.mongodb.com/atlas/full-text-search
fuente