Merkle Trees werden als Anti-Entropie-Mechanismus in mehreren verteilten, replizierten Schlüssel- / Wertspeichern verwendet:
Zweifellos ist ein Anti-Entropie-Mechanismus eine gute Sache - vorübergehende Fehler treten einfach in der Produktion auf. Ich bin mir nur nicht sicher, warum Merkle Trees der beliebte Ansatz sind.
Das Senden eines vollständigen Merkle-Baums an einen Peer umfasst das Senden des lokalen Schlüsselraums an diesen Peer zusammen mit Hashes jedes Schlüsselwerts, die in den untersten Ebenen des Baums gespeichert sind.
Um einen von einem Kollegen gesendeten Merkle-Baum zu unterscheiden, muss ein eigener Merkle-Baum vorhanden sein.
Da beide Peers bereits über einen sortierten Schlüssel- / Wert-Hash-Bereich verfügen müssen, können Sie eine lineare Zusammenführung durchführen, um Diskrepanzen zu erkennen.
Ich bin einfach nicht davon überzeugt, dass die Baumstruktur Einsparungen bietet, wenn Sie die Unterhaltskosten berücksichtigen, und die Tatsache, dass lineare Übergänge über die Baumblätter bereits durchgeführt werden, um die Darstellung über den Draht zu serialisieren .
Um dies zu begründen, könnte eine Strohmann-Alternative darin bestehen, dass Knoten Arrays von Hash-Digests austauschen, die schrittweise aktualisiert und durch die Modulo-Ringposition eingeteilt werden.
Was vermisse ich?
Antworten:
Merkle-Bäume begrenzen die beim Synchronisieren übertragene Datenmenge. Die allgemeinen Annahmen sind:
Ein Merkle Tree Austausch würde so aussehen:
Im typischen Fall ist die Komplexität der Synchronisierung der Schlüsselräume log (N). Ja, im Extremfall, wenn keine Schlüssel gemeinsam sind, entspricht die Operation dem Senden der gesamten sortierten Liste von Hashes, O (N). Man könnte die Kosten für das Erstellen von Merkle-Bäumen amortisieren, indem man sie dynamisch erstellt, wenn Schreibvorgänge eingehen, und das serialisierte Formular auf der Festplatte belässt.
Ich kann nicht darüber sprechen, wie Dynamo oder Cassandra Merkle-Bäume verwenden, aber Riak hat sie nicht mehr für die Synchronisation innerhalb des Clusters verwendet (in den meisten Fällen sind angedeutete Übergabe und Lesereparatur ausreichend). Wir haben vor, sie später wieder hinzuzufügen, nachdem sich einige interne Architekturelemente geändert haben.
Für weitere Informationen über Riak empfehlen wir Ihnen, sich der Mailingliste anzuschließen: http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
quelle