2012-02-06 9 views
5

Tengo una mesa con alrededor de 100.000 filas en este momento. Quiero indexar los datos en esta tabla en un Índice de Solr.¿La mejor manera de indexar datos de tabla de base de datos en Solr?

Así el método ingenuo sería:

  • conseguir todas las filas
  • Para cada fila: se convierten en una SolrDocument y añadir cada documento a una solicitud
  • Una vez que todas las filas se convierten entonces puesto la solicitud se

Algunos problemas con este enfoque que se me ocurren son:

  • Cargando datos demasiado (el contenido de toda la tabla) en la memoria
  • la publicación de una de las grandes demandas

Sin embargo, algunas ventajas:

  • Sólo una petición a la base de datos
  • Solo una solicitud POST a Solr

El enfoque no es escalable, lo veo desde a medida que la tabla crece, también lo harán los requisitos de memoria y el tamaño de la solicitud POST. Necesito tal vez tomar n número de filas, procesarlas, luego tomar el siguiente n?

Me pregunto si alguien tiene algún consejo sobre cómo implementar mejor esto?

(ps. Yo busco el sitio, pero no he encontrado alguna pregunta que eran similares a este.)

Gracias.

+0

[DataImportHandler] (http://wiki.apache.org/solr/DataImportHandler)? – nikhil500

+0

He leído sobre eso, pero no es una asignación directa de column-to-indexField, hay una pequeña transformación que se aplica, por lo tanto, quiero hacer esto en el código. – C0deAttack

+2

DIH es compatible con muchos [transformadores] (http://wiki.apache.org/solr/DataImportHandler#Transformer). También puede escribir [transformadores personalizados] (http://wiki.apache.org/solr/DIHCustomTransformer). Recomendaré usar DIH si es posible; creo que necesitará la menor cantidad de codificación y será más rápido que PUBLICAR los documentos. – nikhil500

Respuesta

1

he utilizado la sugerencia de nikhil500:

DIH es compatible con muchos transformadores. También puede escribir transformadores personalizados.Recomendaré usar DIH si es posible; creo que necesitará la menor cantidad de codificación y será más rápido que PUBLICAR los documentos. - nikhil500 6 de febrero a las 17:42

1

Si desea equilibrar entre POSTING todos los documentos a la vez y realizar un POST por documento, puede utilizar una cola para recopilar documentos y ejecutar un hilo separado que envíe documentos una vez que haya recopilado suficiente. De esta forma puede administrar el problema de memoria frente a tiempo de solicitud.

0

Una vez tuve que cargar ~ 3000 filas (cada uno de 5 campos) de DB a Solr. Ejecuté cada documento cargado por separado e hice una única confirmación. Toda la operación tomó solo unos segundos, pero algunas cargas (8 de 3000) habían fallado.

Lo que funcionó perfectamente fue cargar en lotes de 50 antes de comprometerse. 50 puede haber sido muy bajo. Existen límites recomendados para la cantidad de documentos que puede cargar antes de realizar una confirmación. Depende del tamaño de los documentos.


Pero esta es una operación única, que puede supervisar con un script pirateado. ¿Una operación subsiguiente hace que indexe 100.000 filas a la vez? ¿O puede salirse con la indexación de unos pocos cientos de documentos actualizados por operación?

Cuestiones relacionadas