Wie findet Cassandra den Knoten, der die Daten enthält?

Ich habe einige Artikel und viele Fragen / Antworten zu Cassandra auf SO gelesen, aber ich kann immer noch nicht herausfinden, wie Cassandra entscheidet, zu welchem Knoten er gehen soll, wenn er die Daten liest.

Zunächst einige Annahmen zu einem imaginären Cluster:

Replikationsstrategie = einfachVerwenden von Random PartitionerCluster von 10 KnotenReplikationsfaktor von 5

Hier ist mein Verständnis der Funktionsweise von Schreibvorgängen basierend auf verschiedenen Datastax-Artikeln und anderen Blog-Posts, die ich gelesen habe:

Client sendet die Daten an einen zufälligen KnotenDer "zufällige" Knoten wird basierend auf dem MD5-Hash des Primärschlüssels festgelegt.

Data wird in das commit_log und die Memtable geschrieben und dann viermal weitergegeben (mit RF = 5).

Die 4 nächsten Knoten im Ring werden dann ausgewählt und die Daten bleiben in ihnen erhalten.

So weit, ist es gut

Nun stellt sich die Frage: Wenn der Client eine Leseanforderung (z. B. mit CL = 3) an den Cluster sendet, woher weiß Cassandra, mit welchen Knoten (5 von 10 als Worst-Case-Szenario) er Kontakt aufnehmen muss, um diese Daten abzurufen? Sicher geht es nicht an alle 10 Knoten, da dies ineffizient wäre.

Nehme ich mal richtig an, dass Cassandra wieder einen MD5-Hash des Primärschlüssels (der Anfrage) macht und den Knoten danach auswählt und dann den Ring abläuft?

Auch, wie funktioniert der Fall der Netzwerktopologie? Woher weiß Cassandra, welche Knoten in jedem DC / Rack die Daten enthalten, wenn ich mehrere Rechenzentren habe? Soweit ich weiß, ist nur der erste Knoten offensichtlich (da der Hash des Primärschlüssels explizit zu diesem Knoten geführt hat).

Tut mir leid, wenn die Frage nicht sehr klar ist, und bitte fügen Sie einen Kommentar hinzu, wenn Sie weitere Details zu meiner Frage benötigen.

Danke vielmals

Antworten auf die Frage(6)

Ihre Antwort auf die Frage