Antwort

8

CAP Theorem ist eigentlich ein bisschen irreführend. Die Tatsache, dass Sie ein CA-Design haben können, ist unsinnig, denn wenn eine Partition auftritt, haben Sie notwendigerweise ein Problem in Bezug auf Konsistenz (z. B. Datensynchronisierung) oder Verfügbarkeit (Latenz). Deshalb ist ein genauer Satz gibt es besagt, dass:

Während einer Partition in einem verteilten System, müssen Sie zwischen Konsistenz und Verfügbarkeit.

Noch in der Praxis ist es nicht so einfach. Sie sollten beachten, dass die Wahl zwischen Konsistenz und Verfügbarkeit nicht binär ist. Sie können sogar ein gewisses Maß an beiden haben. In Bezug auf ACID können Sie z. B. atomare und dauerhafte Transaktionen mit NoSQL durchführen, aber für eine bessere Verfügbarkeit ein gewisses Maß an Isolation und Konsistenz einbüßen. Die Verfügbarkeit kann dann mit der Latenz assimiliert werden, da Ihre Antwortzeit von mehreren Faktoren abhängt (ist der nächste Server verfügbar?).

Also, um Ihre Frage zu beantworten, ist dies in der Regel Marketing Bullshit. Sie müssen tatsächlich die Oberfläche zerkratzen, um zu sehen, was die Lösung gerade gewinnt und einbüßt.

Wenn Sie tiefergehende Erklärungen möchten, können Sie here, here oder here suchen.

+0

Vielen Dank für diese gute Antwort! Ich habe noch eine weitere Frage: Wenn wir Verfügbarkeit wählen, bedeutet das, dass wir lieber Geschwindigkeit haben. Mit anderen Worten, wenn wir ein Kommunikationsproblem haben (Partition), sind die Knoten wieder online, aber sie sind nicht synchronisiert. Oder wenn wir (Konsistenz) genaue Daten bevorzugen - zum Beispiel, wenn wir Transaktionen von Millionen Euro haben und so weiter ... In diesem Fall werden wir Konsistenz wählen. Hab ich recht? Welcher Satz ist das? hat es irgendeinen Namen? :) – grep

+1

@grep Ja, du hast Recht, aber du würdest das nicht tun, weil es zu viele Kompromisse gibt, wenn du das eine oder das andere wählst. Die reale Welt ist komplizierter als ein Theorem :) – LMeyer

+0

Nochmals vielen Dank. Mit dem CAP-Theorem weiß ich, welche Datenbank zwischen CP (BigData, Mongo, Hbase) und zwischen AP (Riak, Cassandra, Dynamo) liegt. Wenn wir neue Theorem, Konsistenz oder Verfügbarkeit verwenden, wie Datenbank wählen? Wenn wir traurig sind, dass BigData, Mongo, Hbase nur Konsistenz haben und Dynamo, Riak, Cassandra nur Verfügbarkeit haben, wird das korrekt sein? Wie ich verstehe, ist das nicht korrekt, ich kann beide mit einem gewissen Grad haben. ist es wahr? – grep