remarks generate example c# search solr nosql ravendb

generate - params comments c#



¿Cómo buscar en grandes conjuntos de datos sin texto? (4)

En un proyecto en el que estoy trabajando, el cliente tiene un RDBMS antiguo y masivo (rango de terabyte). Las consultas de todo tipo son lentas y no hay tiempo para corregir / refactorizar el esquema. Identifiqué los conjuntos de consultas comunes que deben optimizarse. Este conjunto se divide en dos: consultas de texto completo y de metadatos.

Mi plan es extraer los datos de su base de datos y dividirlos en dos sistemas de almacenamiento diferentes, cada uno optimizado para un conjunto de consultas en particular.

Para la búsqueda de texto completo, Solr es el motor que tiene más sentido. Se trata de sharding y las funciones de replicación lo hacen ideal para la mitad del problema.

Para las consultas de metadatos, no estoy seguro de qué ruta tomar. Actualmente, estoy pensando en usar un RDBMS con un esquema extremadamente desnormalizado que representa un subconjunto particular de los datos del RDBMS "autorizado". Sin embargo, mi cliente está preocupado por la falta de fragmentación y replicación de dicho subsistema y la dificultad / complicaciones de establecer tales características en comparación con Solr que ya las incluye. Los metadatos en este caso toman la forma de números enteros, fechas, bools, bits y cadenas (con un tamaño máximo de 10 caracteres).

¿Existe un sistema de almacenamiento de base de datos que incluya fragmentación y replicación incorporadas que puedan ser particularmente útiles para consultar dichos metadatos? Tal vez una solución sin sql por ahí que ofrece un buen motor de consulta?

Ilumina por favor.

Adiciones / respuestas:

Solr puede usarse para metadatos, sin embargo, los metadatos son volátiles. Por lo tanto, tendría que comprometerme a menudo con los índices. Esto causaría que la búsqueda se degradara bastante rápido.


Estoy seguro de que no tendrá tiempos de consulta rápidos en ningún sistema que tenga actualizaciones frecuentes. Para implementar el sharding usted mismo en contra de un RDBMS, necesitaría encontrar alguna clave para dividir los registros y llenar varias bases de datos. Luego, puede consultarlos todos al mismo tiempo para obtener y procesar los datos de una manera de reducir mapas. Esto le permitirá aumentar el número de máquinas a medida que crecen sus datos, y posiblemente le permita aumentar la velocidad de la operación. Desde una búsqueda rápida en Google, tanto MongoDB como Hadoop proporcionan esta función de mapa / reducción, no estoy familiarizado con ambas.

No es raro que se generen informes complejos de larga ejecución sobre la marcha. Sin embargo, esto generalmente viene acompañado de una notificación por correo electrónico cuando el informe ha finalizado la generación. Es un buen formato de notificación de inserción para interactuar con humanos. Además, si estos informes se esperan de forma cíclica (por ejemplo, semanal, mensual, etc.), puede utilizar la notificación por correo electrónico cuando estos informes estén listos, la única diferencia es que el tiempo de inicio de la generación es automático.


Si usa ElasticSearch: , simplemente puede agregar los metadatos como claves adicionales del documento json:

{ "message": ... your full text, "date": "2009-11-15T14:12:12", ... }

Luego puede buscar con ambos al mismo tiempo. De lo contrario, si todavía desea hacer el enfoque de dos sistemas, monogoDB es una tienda de documentos con auto-sharding que tiene algunos mecanismos de consulta bastante avanzados (campos, mapa-reducir, índices para consultas rápidas).


Utiliza MongoDB para tu tienda de metadatos:

Sin embargo , la desventaja es que no puede realizar uniones. Sea inteligente sobre la desnormalización de sus datos para que pueda evitar esto.


RavenDB :

Contras: es una licencia de AGPL. Dependiendo de su entorno dev / server, podría considerar que se ejecuta en .NET a con. Además, no conozco el estado de los clientes de otras plataformas que .NET.

Solandra :

  • Integra Solr y Cassandra
  • Búsqueda de texto completo administrado por Solr
  • Replicación y sharding gestionados por Cassandra

Contras: aún no publicado.

ElasticSearch:

ElasticSearch es similar a RavenDB, pero parece enfatizar la búsqueda de texto completo donde RavenDB hace hincapié en ser una base de datos general NoSQL.