2008-09-17 9 views
7

Estoy buscando mecanismos para una mejor capacidad de búsqueda en nuestra base de datos. Actualmente es un gran cuello de botella (que causa consultas de larga duración que están perjudicando el rendimiento de nuestra base de datos).¿Cuál es la mejor búsqueda contra un DB con Lucene?

Mi jefe quería que mirara en Solr, pero en una inspección más cercana, parece que en realidad queremos algún tipo de mecanismo de integración de DB con Lucene.

Desde el Lucene FAQ, recomiendan Hibernate Search, Compass y DBSight .

Como fondo de nuestra pila de tecnología actual, estamos utilizando JSPs rectos en Tomcat, sin Hibernate, sin otros frameworks encima ... solo directamente Java, JSP y JDBC contra una base de datos DB2.

Dado que, parece que la búsqueda de Hibernate puede ser un poco más difícil de integrar en nuestro sistema, aunque podría ser bueno tener la opción de utilizar Hibernate después de dicha integración.

¿Alguien tiene alguna experiencia que puedan compartir con el uso de una de estas herramientas (u otras soluciones similares basadas en Lucene) que podrían ayudar a elegir la herramienta adecuada?

Tiene que ser una solución FOSS e idealmente actualizar Lucene con cambios de la base de datos de forma automática (aunque eficiente), sin esfuerzo adicional para notificar a la herramienta cuando se han realizado cambios (de lo contrario, parece que mi propio Lucene la solución sería igual de buena). Además, tenemos múltiples servidores de aplicaciones con solo 1 base de datos (+ conmutación por error), por lo que sería bueno si es fácil usar la solución desde todos los servidores de aplicaciones sin problemas.

Sigo inspeccionando las opciones ahora, pero sería realmente útil utilizar las experiencias de otras personas.

+0

¿alguna vez incorporó Lucene? –

Respuesta

0

Para un aumento del rendimiento puro con la búsqueda Lucene sin duda ayudará mucho. Solo indexe lo que le importa/necesita y debería ser bueno. Puede usar Hibernate o alguna otra pieza si lo desea, pero no creo que sea necesario.

+0

¡Gracias por la respuesta! Desafortunadamente, realmente me gustaría ver lo que estos marcos pueden proporcionar para que no tenga que implementar mi propia solución completa. –

2

he tenido buenas experiencias con el compás. Tiene una muy buena integración con hibernación y puede reflejar los cambios de datos realizados a través de hibernación y jdbc directamente a los índices de Lucene a través de sus dispositivos GPS http://www.compass-project.org/docs/1.2.2/reference/html/gps-jdbc.html.

Mantener los índices de Lucene en todos sus servidores de aplicaciones puede ser un problema. Si tiene varios servidores de aplicaciones actualizando el db, entonces puede solucionar algunos problemas para mantener el índice sincronizado con todos los cambios. La brújula puede tener un mecanismo alternativo para manejar esto ahora.

El proyecto Alfresco (CMS) también utiliza Lucene y tiene un mecanismo para replicar los cambios de índice Lucene entre servidores que pueden ser útiles para manejar estos problemas.

Comenzamos a usar Compass antes de que Hibernate Search realmente despegara, por lo que no puedo ofrecer ninguna comparación con él.

3

Cuando dice "buscar en un DB", ¿qué quiere decir?

Las bases de datos relacionales y los sistemas de recuperación de información utilizan enfoques muy diferentes por una buena razón. ¿Qué tipo de datos estás buscando?¿Qué tipo de consultas llevas a cabo?

Si fuera a implementar un índice invertido sobre una base de datos, como lo hace Compass, no utilizaría su enfoque, que es implementar la abstracción de Lucene Directory con BLOB. Por el contrario, implementaría la abstracción de Lucene IndexReader.

Las bases de datos relacionales son bastante capaces de mantener los índices. El valor que aporta Lucene en este contexto es su capacidad de análisis, que es más útil para los registros de texto no estructurados. Un buen enfoque aprovecharía las fortalezas de cada herramienta.

A medida que se realizan las actualizaciones en el índice, Lucene crea más segmentos (archivos adicionales o BLOB), que degradan el rendimiento hasta que se utiliza un costoso procedimiento de "optimización". La mayoría de las bases de datos amortizarán este costo en cada actualización de índice, proporcionándole un rendimiento más estable.

1

LuSql http://code.google.com/p/lusql/ le permite cargar los contenidos de una base de datos accesible para JDBC en Lucene, lo que hace que se pueda buscar. Está altamente optimizado y tiene múltiples subprocesos. Soy el autor de LuSql y saldré con una nueva versión (rediseñada con una nueva arquitectura enchufable) en el próximo mes.

Cuestiones relacionadas