2016-06-25 21 views
2

In der MongoDB-Dokumentation, here, wurde erwähnt, dass in einer Replikatmenge sogar mit Majorität readConcern wir endgültige Konsistenz erreichen würden. Ich frage mich, wie ist das möglich, wenn wir in Lese- und Schreibrechten die Mehrheit haben, was zu einem Quorum (R + W> N) in unserem verteilten System führt? Ich erwarte ein starkes konsistentes System in dieser Einstellung. Dies ist die Technik, die auch Cassandra verwendet, um eine starke Konsistenz zu erreichen.Wie erreichen Sie eine starke Konsistenz in MongoDB Replica Sets?

Kann mir bitte jemand dies erklären?

Antwort

3

MongoDb wird in Bezug auf starke Konsistenz nicht sehr gut angesehen. Wenn Sie ein typisches sharded und repliziertes Setup haben, um die Konsistenz zu erhöhen, müssen Sie etwas von der Leistung der db abwägen. Wie Sie wissen, können Sie Schreibvorgänge nur auf dem Master des Replikatsatzes ausführen. Standardmäßig können Sie nur davon lesen. Dies ist möglicherweise die stärkste Konsistenz, die Sie von MongoDb AFAIK erhalten, da die anderen Knoten nur für Replikations-, Failover- und Verfügbarkeitsgründe verwendet werden. Und Sie könnten von den sekundären Knoten nur für Operationen lesen, bei denen die neuesten Daten nicht entscheidend sind, und für lang andauernde Operationen, wie zum Beispiel die Aggregation.

Wenn Sie Sharding einrichten, können Sie einen großen Teil der Lese-/Schreibvorgänge auf verschiedene primäre Knoten verschieben. Ich denke, dass man bei MongoDb alles tun kann, um Konsistenz und Leistung insbesondere bei größeren Datensätzen zu erhöhen.

+0

Sie sprechen über Leistung und Skalierbarkeit bei Lese- und Schreibvorgängen, die durch Sharding gehandhabt werden können. Eventuelle Konsistenz ist nur dann von Bedeutung, wenn Sie sekundäre Knoten in einem Replikatsatz für Lesevorgänge verwenden möchten. Meine Frage ist, warum wir keine starke Konsistenz haben, obwohl wir einen Quruom haben? –

+0

Das Quorum ist nur notwendig, wenn eine Primary ausgewählt wird. Es kann Netzwerkverzögerung/-verzögerung nicht berücksichtigen, und das Primärsystem muss nicht darauf warten, dass die Schreibtransaktion auf allen Sekundärteilen nur aus Gründen der Konsistenz wiederholt wird. Stellen Sie sich dieses Szenario vor - mit zwei SSD-basierten Knoten für Leistung und Failover und einem günstigeren HDD-Knoten für Backups. Soll der primäre High-Performance-Knoten auf den Abschluss des Vorgangs auf dem langsamsten Mitglied warten? –

+0

Mehrheitswahl ist für die Vorwahl erforderlich. Quorum bedeutet Leser + Schreiber> Anzahl der Knoten. Dieser Ausdruck ist wahr, wenn wir sowohl readConcern als auch writeConcern auf die Majorität setzen. Wenn wir also von einer Mehrheit von Knoten lesen, gibt es mindestens einen Knoten, der den neuesten Schreibvorgang hat, und daher ist das System stark konsistent. Ich möchte wissen, warum dieser Ausdruck bei MongoDB nicht stimmt? –