La diferencia entre vaciar y actualizar
Hablemos primero de la conclusión:
La actualización se usa para escribir los datos en la memoria en el translog y en el búfer en memoria (área de memoria caché), y generará un segmento. en la memoria para proporcionar nuevas adiciones. La función de búsqueda de documentos no eliminará tanslog.
descarga: después de que el translog alcanza un cierto límite de datos, realizará una operación de descarga, fusionará los segmentos en la memoria en un segmento, persistirá los datos en el disco y borrará los datos en el tanslog. que se utiliza para fusionar los segmentos en la memoria. Permanecen en el disco duro.
Tanto Refresh como Flush se utilizan para que los documentos puedan buscarse inmediatamente después de una operación de indexación. Al agregar un nuevo documento en Elasticsearch, podemos llamar a la operación _refresh o _flush en el índice para que el nuevo documento esté disponible para la búsqueda.
Cuando escribimos un dato en Elasticsearch, no se puede utilizar para la búsqueda inmediatamente. El índice recién agregado debe escribirse en Segment antes de poder buscarse, por lo que después de escribir los datos en el búfer de memoria, no se puede buscar. Cuando se agrega un nuevo registro, Elasticsearch escribirá los datos en el translog y en el búfer en memoria (búfer de memoria).
Durante este tiempo, el documento no se puede buscar, pero aún podemos obtener el documento usando GET por ID. Si desea que el documento se pueda buscar de inmediato, debe llamar manualmente a la operación de actualización. En Elasticsearch, la operación _refresh está configurada para ejecutarse una vez por segundo de forma predeterminada.
Durante esta operación, el contenido del búfer en memoria se copia a un segmento recién creado en la memoria y los nuevos datos están disponibles para su búsqueda.
El intervalo de actualización se puede definir mediante index.refresh_interval en la configuración del índice. Solo después de que el contenido del búfer se escribe en el segmento, el documento escrito se convierte en un documento con capacidad de búsqueda. Por lo general, el contenido del búfer se escribe en el segmento bajo tres condiciones:
Una actualización periódica iniciada por el intervalo de actualización especificado por la configuración en el índice. Por defecto es 1s. Esto hace que los cambios recientes en el índice sean visibles para la búsqueda. El valor predeterminado es 1s. Se puede configurar en -1 para desactivar el lavado. Después del lanzamiento de Elasticsearch 7.0, si esta configuración no se establece explícitamente, los fragmentos que no hayan visto tráfico de búsqueda durante al menos index.search.idle.after segundos no recibirán una actualización en segundo plano hasta que se reciba una solicitud de búsqueda. Las búsquedas que lleguen a fragmentos libres esperarán la siguiente actualización en segundo plano (en 1 segundo). Este comportamiento tiene como objetivo optimizar automáticamente la indexación masiva de forma predeterminada cuando no se realizan búsquedas. Para salir de este comportamiento, se debe establecer un valor explícito de 1 en el intervalo de actualización.
Forzar actualización al importar documentos: PUT twitter/_doc/1?refresh=true
Cuando el búfer de memoria está lleno, de forma predeterminada es el 10% del montón del nodo
p>¿Pero cómo resuelve translog el problema de persistencia? Hay un translog en cada fragmento, lo que significa que está relacionado con la memoria del disco físico. Es sincrónico y seguro, por lo que obtienes persistencia y persistencia incluso para documentos que aún no se han confirmado. Si ocurre un problema, se puede restaurar el registro de transacciones.
Vaciar esencialmente significa escribir todos los documentos en el búfer de memoria en un nuevo segmento de Lucene, junto con cualquier segmento de memoria existente que se envíe al disco, lo que borra el registro de transacciones.