2009-10-17 19 views
9

Necesito mejorar el rendimiento de mi consulta de búsqueda Lucene. ¿Puedo usar RAMDirectory? ¿Optimiza el rendimiento? ¿Existe algún límite de tamaño de índice para esto? Agradecería que alguien pudiera enumerar los pros y los contras de usar un RAMDirectory.Necesito saber los pros y los contras de usar RAMDirectory

Gracias.

Respuesta

6

Un RAMDirectory es más rápido, pero no se escriben en el disco. Solo existe mientras se ejecuta su programa, y ​​debe crearse desde cero cada vez que se ejecuta su programa.

Si su índice es lo suficientemente pequeño como para caber cómodamente en la RAM, y no lo actualiza con frecuencia, puede mantener un índice en el disco y luego crear un directorio RAM a partir del constructor RAMDirectory(Directory dir). Las consultas deberían ser más rápidas que consultar el disco, una vez que hayas pagado la penalización de cargarlo. Pero mida la diferencia: si el índice puede caber en la memoria como un directorio RAM, también puede caber en la memoria caché del disco, por lo que es posible que no vea mucha diferencia.

+0

Gracias por sus entradas ... ¿sé lo pequeño que es "lo suficientemente pequeño"? – user43498

+0

Me imagino que es más pequeña que la RAM física disponible. –

4

Usted debe perfilar el uso de RAMDirectory. Al menos en Linux, el uso de RAMDirectory no es más rápido que el uso del FSDirectory predeterminado, debido a la manera en que el SO almacena la E/S.

12

comparo FSDirectory y RAMDirectory.

  • tamaño del índice es 1.4G
  • memoria
  • Centos, 5G

encontrar más de 1000 palabras clave, el/min/tiempo de respuesta max media (EM) es aquí

  • FSDirectory
    • primera carrera: 351/7/2611
    • segunda pasada: 47/7/837
    • tercera carrera (app reinicio): 53/7/2343
  • RAMDirectory
    • primera ejecución: 38/7/1133
    • segunda pasada: 34/7/189
    • tercera carrera (aplicación reinicio): 38/7/959

Por lo tanto, puede ver que RAMDirectory es más rápido que FSDirectory, pero después de la "caché de archivos de caché de archivos", la brecha de velocidad no es tan clara. ¿Cuál es la desventaja de RMADirectory? En mi prueba

  • Se come mucha más memoria, archivo 1.4G necesitan alrededor de 2G para cargarlo en la memoria. mientras que FSDirectory usa solo 700m. Entonces significa un tiempo más largo para completar gc.
  • Necesita más tiempo para cargar, especialmente cuando el archivo de índice es grande. Es necesario copiar los datos del archivo en la memoria al abrir el índice. Eso significa que las solicitudes se bloquearían por más tiempo cuando reinicie la aplicación.
  • No es tan práctico mantener dos índices al mismo tiempo. Porque nuestra aplicación cambia de índice cada varias horas.Queremos que el índice nuevo se esté calentando mientras que el índice anterior aún funciona en el mismo tomcat.
Cuestiones relacionadas