2012-03-23 13 views
12

¿Funciona varios fragmentos de Solr en una sola máquina para mejorar el rendimiento? Esperaría que Lucene fuera multiproceso, pero parece que no usa más de un núcleo en mi servidor con 16 núcleos físicos. Me doy cuenta de que esto depende de la carga de trabajo, ¡pero cualquier estadística o punto de referencia sería muy útil!¿Los múltiples fragmentos de Solr en una sola máquina mejoran el rendimiento?

+2

¿Has leído Hacker News ayer, por cualquier posibilidad? http://carsabi.com/car-news/2012/03/23/optimizing-solr-7x-your-search-speed/ – aitchnyu

+3

Sí, escribí eso :) Esperaba que otras personas tuvieran algunas estadísticas que pudiera comparar con though – cberner

+0

@cberner ¿Es esto cierto para el rendimiento del índice o es un animal completamente diferente? Necesito actualizar mi índice frecuentemente con el contenido del usuario y estoy buscando acelerarlo. –

Respuesta

11

Ejecuté unos benchmarks of our search stack, y descubrí que agregar más fragmentos de Solr (en una sola máquina, con 16 núcleos físicos) mejoraba el rendimiento hasta aproximadamente 8 fragmentos (donde obtuve una velocidad de 6,5x). Esto está en un índice con ~ 1,5 millones de documentos, ejecutando consultas de rango complejas.

Por lo tanto, parece que Solr no aprovecha múltiples núcleos físicos al ejecutar consultas en un solo índice.

+0

Dado que su índice encaja en el caché de E/S, mejora la latencia. Pero esto no debería ser un consejo general: ¿qué pasaría con un índice más grande? En un contexto en tiempo real? Y no mide en todo momento, ¿qué sucede cuando aumenta el nivel de concurrencia? ¿Podrías hacer tus experimentos otra vez pero con un mayor número de hilos que envían consultas a Solr? (20 por ejemplo) – jpountz

+0

No conozco un índice más grande, pero para la búsqueda en tiempo real, me gustaría que el rendimiento de la indexación no mejore, ya que las escrituras se distribuirán en varios fragmentos. Trataré de realizar algunas pruebas de rendimiento la próxima semana. Sin embargo, tampoco esperaría que haya demasiada diferencia, ya que la sobrecarga de la fusión fue <20% – cberner

0

Si actualmente tiene una sola caja con un solo fragmento, dividiendo este fragmento en varios fragmentos:

  • es probable que empeore el rendimiento,
  • puede mejorar la latencia, por la paralelización de ejecución de la consulta.

No puedo proporcionar estadísticas o puntos de referencia porque depende de si la ejecución de la consulta es CPU o E/S: si la ejecución de la consulta ya está vinculada a un solo cuadro, entonces dividir el fragmento en varios los fragmentos incluso empeorarán el rendimiento. Tendrá que probarse a sí mismo, simplemente tome un registro de producción e intente reproducirlo en ambos escenarios.

+0

Ver mi respuesta anterior, de hecho, parece mejorar el rendimiento, significativamente incluso. – cberner

Cuestiones relacionadas