Elasticsearch consistencia de lectura y escritura
Elasticsearch no tiene un parámetro de "consistencia de lectura" (como Cassandra). Pero tiene "escribir consistencia"y"preferencia de lectura".
La documentación dice lo siguiente sobreConsistencia de escritura
Consistencia de escritura
Para evitar que se realicen escrituras en el lado "incorrecto" de una partición de red, de forma predeterminada, las operaciones de índice solo tienen éxito si hay un quórum (> réplicas / 2 + 1) de fragmentos activos disponibles. Este valor predeterminado se puede anular nodo por nodo utilizando la configuración action.write_consistency. Para alterar este comportamiento por operación, se puede usar el parámetro de solicitud de coherencia.
Los valores de coherencia de escritura válidos son uno, quórum y todos.
Tenga en cuenta que, para el caso en el que el número de réplicas es 1 (total de 2 copias de los datos), el comportamiento predeterminado es tener éxito si 1 copia (la principal) puede realizar la escritura.
La operación de índice solo regresa después de todoactivo Los fragmentos dentro del grupo de replicación han indexado el documento (replicación de sincronización).
Mi pregunta es sobre el último párrafo:
La operación de índice solo regresa después de todoactivo Los fragmentos dentro del grupo de replicación han indexado el documento (replicación de sincronización).
Siwrite_consistency=quorum
(predeterminado) y todos los fragmentos están activos (sin fallas de nodo, sin particiones de red), entonces:
1) ¿La operación de índice regresa tan pronto comoel quórum de fragmentos ha terminado de indexar? (aunque todos los fragmentos estén activos / activos)
2) ¿O regresa la operación de índice cuandotodos los fragmentos activos / activos han terminado de indexar? (es decir, el quórum se considera solo en caso de fallas / tiempos de espera)
En el primer caso, la lectura puede ser eventualmente coherente (puede obtener datos obsoletos), la escritura es más rápida.
En el segundo caso, la lectura es consistente (siempre que no haya particiones de red), la escritura es más lenta (ya que espera el fragmento / nodo más lento).
Alguien sabe como funciona?
Otra cosa que me pregunto es por qué el valor predeterminado para 'preferencia'param (en la solicitud get / search) esrandomized
pero no_local
(que debe haber sido más eficiente, supongo)