must - bool or elasticsearch
Elasticsearch consistencia de lectura y escritura. (2)
Creo que puedo responder a mi propia pregunta ahora :)
Con respecto a la primera pregunta, al releer la documentación ( esto y this ) varias veces :) Me di cuenta de que esta afirmación debería ser correcta:
La operación de índice regresa cuando todos los fragmentos activos / activos han finalizado la indexación, independientemente del parámetro de coherencia. El parámetro de coherencia solo puede impedir que se inicie la operación si no hay suficientes fragmentos disponibles (nodos).
Entonces, por ejemplo, si hay 3 fragmentos (uno primario y dos réplicas), y todos los fragmentos están disponibles, la operación esperará a los 3 (considerando que los 3 están activos / disponibles), independientemente del parámetro de consistencia (incluso cuando sea consistency=one
)
Esto hace que el sistema sea consistente (al menos la parte de api de documento); a menos que haya una partición de red. Pero, no tuve la oportunidad de probar esto todavía.
ACTUALIZACIÓN: por coherencia aquí, no me refiero a la consistencia de ACID, es solo la garantía de que todas las réplicas se actualicen en el momento en que se devuelve la solicitud.
Con respecto a la segunda pregunta: la respuesta obvia es: se randomized
al randomized
para distribuir la carga; por otro lado, un cliente puede elegir un nodo aleatorio para hablar, pero probablemente no sea 100% eficiente ya que una sola solicitud puede necesitar múltiples fragmentos.
Elasticsearch no tiene un parámetro de "coherencia de lectura" (como Cassandra). Pero tiene " consistencia de escritura " y " preferencia de lectura ".
La documentación dice lo siguiente acerca de la consistencia de escritura
Escribir consistencia
Para evitar que las escrituras se realicen 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 puede anularse nodo por nodo utilizando la configuración action.write_consistency. Para modificar este comportamiento por operación, se puede usar el parámetro de solicitud de consistencia.Los valores de coherencia de escritura válidos son uno, quórum y todos.
Tenga en cuenta que, en el caso de que el número de réplicas sea 1 (un total de 2 copias de los datos), entonces el comportamiento predeterminado es tener éxito si 1 copia (la principal) puede realizar la escritura.
La operación de índice solo se devuelve después de que todos los fragmentos activos dentro del grupo de replicación hayan indexado el documento (sincronización de replicación).
Mi pregunta es sobre el último párrafo:
La operación de índice solo se devuelve después de que todos los fragmentos activos dentro del grupo de replicación hayan indexado el documento (sincronización de replicación).
Si write_consistency=quorum
(predeterminado) y todos los fragmentos están write_consistency=quorum
(sin fallos de nodo, no hay partición de red), entonces:
1) ¿Regresa la operación de índice tan pronto como el quórum de fragmentos haya terminado de indexar ? (aunque todos los fragmentos son vivos / activos)
2) ¿O vuelve la operación de índice cuando todos los fragmentos activos / activos han finalizado la indexación ? (es decir, el quórum se considera solo en caso de fallas / tiempos de espera)
En el primer caso, la lectura puede ser eventualmente consistente (puede tener datos obsoletos), la escritura es más rápida.
En el segundo caso, la lectura es coherente (siempre que no haya particiones de red), la escritura es más lenta (mientras espera el fragmento / nodo más lento).
Alguien sabe como funciona?
Otra cosa sobre la que me pregunto es por qué el valor predeterminado para el _local
'' preference '' (en la solicitud de obtención / búsqueda) es randomized
pero no _local
(que debe haber sido más eficiente, supongo)
Escriba: No estoy seguro de que lo anterior sea cierto para ES 6.1 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#index-wait-for-active-shards dice que La operación de índice devuelve si el fragmento primario está activo y se puede cambiar a otros valores.
Las búsquedas son aleatorias, por lo que la configuración de espera del campo de fragmento activo para todos garantizará que la escritura se realice correctamente si se realiza en todos los fragmentos.
Lectura: la preferencia todavía se puede usar, pero está marcada como obsoleta.