estoy trabajando en portar un motor de búsqueda a partir de una base de datos SQL para Elasticsearch. La principal razón para hacerlo es ser capaz de calcular las facetas fácilmente.Elasticsearch actuaciones esperables
Actualmente tenemos facetas en el SQL mediante la generación de tablas de precálculo. Funciona bien pero es difícil de mantener y las facetas solo se admiten en un subconjunto de datos.
Ahora el prototipo ES está funcionando, estoy evaluando las dos soluciones, y parece que la versión ES está un poco por debajo de la versión sql en términos de rendimiento (en términos de mantenibilidad es mucho mejor).
He utilizado exactamente las mismas configuraciones de máquina, una plataforma de 64 bits, 32 gigas de memoria RAM, un disco ssd y un Intel Xeon de cuatro núcleos a 3 ghz para comparar el sql y el ES.
El documento no es pequeño, hay alrededor de 200 campos, dependiendo de la solicitud, se utiliza la clasificación basada en script, y las facetas siempre se calculan en 8 campos del documento.
El índice contiene 3 millones de documentos, si no me equivoco, es relativamente pequeño para lo que ES puede manejar.
En términos de consulta, utilizo una consulta filtrada, y para algunas solicitudes, una consulta custom_filters_score para calcular el puntaje y usarlo para ordenar.
Algunos de los filtros son globales debido a las facetas, pero siempre hay algunos filtros en la consulta filtrada, por lo que se debe reducir el número de documentos escaneados (no se escanea todo el índice).
Utilizo dos medidas en mis pruebas: el tiempo pasado en el servidor para ejecutar la búsqueda y el número de consultas por segundo ejecutadas por el cliente ejecutando 100 hilos en paralelo.
Para elasticsearch, el tiempo promedio pasado en el servidor es de alrededor de 500 ms para cada consulta (para 100 consultas en paralelo), y las consultas promedio por segundo en el cliente son alrededor de 160 (algunos ms se pierden al generar la consulta , enviándolo, recibiendo resultados y analizándolos). Y esto es con un índice que tiene de 1 fragmento y 0 réplicas, cuando aumento el número de fragmentos/réplicas, actuaciones caen significativamente.
para SQL, el tiempo medio para ejecutar una consulta es de alrededor de 360 ms (idem, con 100 consultas en paralelo), y las consultas promedio por segundo en el cliente es de alrededor de 200.
Sé que es Es difícil de comparar, pero como no tengo idea de los resultados que puedo esperar, me pregunto si alguien puede comentar sobre estas medidas.
Quizás me perdí algo y debería ser un orden de magnitud más rápido, o tal vez estos son los resultados típicos de entornos similares a los míos, no lo sé.
¿Qué puedo esperar en mi caso? ¿Qué observó en circunstancias similares con ES? ¿Soporta bien las solicitudes simultáneas? caso de que el tiempo para ejecutar una consulta esté en el intervalo de 500 ms al hacer 100 consultas al mismo tiempo? ¿Hay formas de mejorar los resultados de búsqueda?
Cualquier información o comentario son bienvenidos, esta es una parte importante para la decisión de industrializar el prototipo o no.
Gracias.
Hola, ¿A quién quieres comentar sobre esto? –
Es posible que desee intentar hacerlo un poco menos ranty ... – fread2281