Elasticsearch Konsistenz beim Lesen und Schreiben
Elasticsearch hat keinen Parameter "Lesekonsistenz" (wie Cassandra). Aber es hat "Konsistenz schreiben" und "read Einstellung ".
Documentation sagt Folgendes überKonsistenz schreiben
Konsistenz schreiben
Um zu verhindern, dass Schreibvorgänge auf der "falschen" Seite einer Netzwerkpartition stattfinden, sind Indexoperationen standardmäßig nur erfolgreich, wenn ein Quorum (> replicas / 2 + 1) aktiver Shards verfügbar ist. Diese Standardeinstellung kann mit der Einstellung action.write_consistency knotenweise überschrieben werden. Um dieses Verhalten pro Operation zu ändern, kann der Konsistenzanforderungsparameter verwendet werden.
Valid Schreibkonsistenzwerte sind eins, Quorum und alle.
Hinweis: Für den Fall, dass die Anzahl der Replikate 1 beträgt (insgesamt 2 Kopien der Daten), ist das Standardverhalten erfolgreich, wenn 1 Kopie (die primäre) den Schreibvorgang ausführen kann.
Die Indexoperation kehrt immerhin erst zurückakti Shards innerhalb der Replikationsgruppe haben das Dokument indiziert (Replikation synchronisieren).
Meine Frage bezieht sich auf den letzten Absatz:
Die Indexoperation kehrt immerhin erst zurückakti Shards innerhalb der Replikationsgruppe haben das Dokument indiziert (Replikation synchronisieren).
Wennwrite_consistency=quorum
(Standard) und alle Shards sind live (keine Knotenausfälle, keine Netzwerkpartition), dann:
1) Kehrt die Indexoperation zurück, sobald Quorum von Shards haben die Indizierung beendet? (obwohl alle shards live / aktiv sind)
2) Oder gibt die Indexoperation zurück, wennalle live / aktiven Shards haben die Indizierung beendet? (d. h. das Quorum wird nur bei Fehlern / Zeitüberschreitungen berücksichtigt.)
Im ersten Fall ist das Lesen möglicherweise konsistent (es werden möglicherweise veraltete Daten abgerufen), das Schreiben ist schneller.
Im zweiten Fall - Lesen ist konsistent (solange es keine Netzwerkpartitionen gibt), schreiben ist langsamer (da auf den langsameren Shard / Node gewartet wird).
Weiß jemand, wie es funktioniert?
Eine andere Sache, über die ich mich wundere - ist, warum der Standardwert für ' Einstellung 'param (in get / search request) istrandomized
aber nicht_local
(was wohl effizienter gewesen sein muss)