MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Der Unterschied zwischen Mehrheit und linearisierbar

"Linearisierbar " Read Concern wurde in MongoDb 3.4 eingeführt, um ein mögliches Problem mit "Mehrheit" zu lösen " Bedenken lesen.

Versuchen wir, das Problem mit "Mehrheit" zu verstehen “ Lesen Sie Bedenken, was „linearisierbar ist " bringt zu uns.

Angenommen, wir haben einen Replikatsatz von 3 Knoten, der etwa so aussieht:

Wo, A ist Primär,B ist Sekundär,C ist sekundär

Lassen Sie uns auch zwei Benutzer Alice haben und Bob , das einige Operationen am folgenden Dokument ausführt, das sich in „users befindet " Sammlung.

{
 "_id": 100234,
 "name": "Katelyn"
}

Zum Zeitpunkt T0:

Folgendes passiert,

  1. Alice wird mit A verbunden (primär) und gibt folgenden Befehl aus.

Ausgabe:

  1. B und C erkennt, dass A antwortet nicht mehr und beginnt mit dem Wahlverfahren. (Möglicherweise aufgrund von Netzwerkpartitionierung ).

Zum Zeitpunkt T1:

Folgendes passiert,

  1. Aufgrund des Wahlverfahrens stellt sich B als neuer Vorwahlkandidat .

Allerdings bis zum Zeitpunkt A wird nicht mitgeteilt oder A selbst erkennt, dass es sich zu einem Secondary degradieren muss, dient es weiterhin als Primary (allerdings nur für einen sehr kurzen Zeitraum).

Zum Zeitpunkt T2:

  1. Bob wird mit B verbunden (new primary) und gibt den folgenden Befehl aus.
  1. Bob wird vom Schreiben bestätigt.

Zum Zeitpunkt T3:

  1. Alice wird mit A verbunden (alte primäre) und gibt folgenden Befehl aus.

Ausgabe:

Alice erhält hier die veralteten Daten, selbst nachdem sie die Mehrheitslesebedenken ausgegeben hat, d. h. der von Bob vorgenommene Schreibvorgang ist für Alice nicht sichtbar. Somit ist die Eigenschaft „Linearisierbarkeit " wird in diesem Fall kompensiert.

Daher kommt die Lösung, nämlich "linearisierbar". " Read Concern. Mit dieser Eigenschaft überprüft Mongod seine Primärknoten und kann die Mehrheit der Knoten sehen, bevor die Ergebnisse des Lesevorgangs ausgegeben werden. Es gibt jedoch eine Leistungseinbuße bei der Verwendung dieses Read Concern gegenüber "Majority", daher ist dies kein Ersatz für "Mehrheit" lesen Bedenken.

In Bezug auf writeConcernMajorityJournalDefault -Eigenschaft ist es lediglich eine Replikatsatz-Konfigurationsoption. Es akzeptiert boolesche Werte .

Richtig bedeutet, dass MongoDB den Schreibvorgang bestätigt, nachdem eine Mehrheit der stimmberechtigten Mitglieder in das Protokoll auf der Festplatte geschrieben haben.

Falsch bedeutet, dass MongoDB den Schreibvorgang bestätigt, nachdem eine Mehrheit der stimmberechtigten Mitglieder den Vorgang im Speicher angewendet hat.

Die obige Eigenschaft ist nur anwendbar, wenn "majority" für "Write Concern" verwendet wird und kein Journaling-Flag angegeben ist.