es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué Lucene (o Elasticsearch) no utiliza mmap para escribir?

En la mayoría de los casos, Lucene utiliza MMapDirectory para la lectura y escritura. Y utiliza mmap para la lectura, pero no para la escritura. Como se indica en el comentario de la clase MMapDirectory:

Implementación de Directorio basada en archivos que utiliza mmap para la lectura y FSDirectory.FSIndexOutput para la escritura.

Me gustaría saber por qué. ¿Es porque la escritura con mmap no es más rápida que la escritura tradicional?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según el comentario en la clase MMapDirectory, Lucene utiliza mmap para la lectura pero no para la escritura. La razón de esto no es porque la escritura con mmap no sea más rápida que la escritura tradicional, sino porque la escritura con mmap tiene algunas limitaciones.

    Mmap se utiliza principalmente para la lectura porque permite acceder a archivos mapeados en memoria con la misma facilidad que a un arreglo en memoria. Es más rápido que el enfoque de lectura tradicional, ya que reduce el tiempo que se tarda en leer desde el disco. La función mmap mapea un archivo en memoria y le permite acceder a su contenido a través de una dirección de memoria. En otras palabras, leer datos desde un archivo mapeado en memoria es tan rápido como leer datos desde la memoria misma.

    Sin embargo, la escritura con mmap tiene algunas limitaciones. Con la escritura con mmap, es necesario crear un nuevo mapeo y actualizarlo cada vez que se escribe datos en el archivo, lo que puede ser más lento que la escritura tradicional, ya que aumenta la carga del sistema. Otra limitación es que el tamaño de un archivo que se puede mapear en memoria está limitado por el tamaño del espacio de direcciones virtuales.

    Por lo tanto, para evitar estas limitaciones, Lucene utiliza FSDirectory.FSIndexOutput para la escritura. Al utilizar FSDirectory.FSIndexOutput, Lucene puede asegurarse de que la operación de escritura sea manejada por el sistema de E/S del sistema operativo y no por Java. Esto proporciona un buen rendimiento y evita las limitaciones asociadas con la escritura con mmap.

    En resumen, Lucene utiliza mmap para la lectura porque es más rápido que la lectura tradicional, pero no utiliza mmap para la escritura debido a las limitaciones asociadas. En su lugar, utilizan FSDirectory.FSIndexOutput para la escritura para garantizar un buen rendimiento y evitar las limitaciones de la escritura con mmap.

Comments are closed.