java search lucene indexing

java - ¿Cómo cargar un archivo de índice FSdirectory como un directorio RAM en Lucene?



search indexing (1)

Tengo un archivo de índice en disco duro como FSdirectory cuyo tamaño es de aproximadamente 2 GB. Quiero cargarlo en ram para tener una mejor velocidad de búsqueda. Yo uso el código detrás:

Directory dic=new RAMDirectory(FSDirectory.open(new File("file path")), IOContext.DEFAULT);

Pero no estoy seguro de si funciona. ¿Alguien sabe que funciona o no? ¿Alguna otra manera mejor que esto?

Estaré encantado de cualquier sugerencia. Gracias.


Sí, puede construir RAMDirectory de esa manera, pero se desaconseja en su caso. RAMDirectory no está diseñado para ser utilizado con grandes conjuntos de datos (más de 100MB). Será muy intensivo en GC, largo para construir y consumir el precioso espacio JAVA Heap.

Si tiene problemas de rendimiento, asegúrese de seguir todas las pautas descritas en este lucene Preguntas frecuentes

No olvide que para obtener la velocidad de búsqueda de descenso, el sistema operativo necesita almacenar en memoria caché alguna parte del índice. Para hacerlo, debe dejar algunas memorias libres disponibles para el sistema operativo. Si tiene 16Gb de RAM física y un índice de 8gb, debe configurar el jvm Xmx con 8g. Una buena herramienta de Linux para comprobar que la memoria es htop, imprimirá la RAM utilizada para el proceso como verde (su espacio de almacenamiento dinámico) y la RAM utilizada como archivo de almacenamiento como amarillo (los datos de índice).

Algunos desarrolladores realizan consultas de preparación al inicio de la aplicación para evitar que el primer usuario se quede atascado durante unos segundos mientras el índice se carga mediante el almacenamiento de archivos del sistema operativo.

Entonces, si aún crees que puedes obtener un mejor rendimiento, puedes probar algunos trucos con RAMfs. Pero dudo que pueda obtener mejores resultados que un sistema operativo y un jvm bien ajustados con MMapDirectory.