Welche Konsistenz darf / muss es denn sein?



Die Projektanforderungen bestimmen, ob Cassandra höhere Verfügbarkeit oder bessere Konsistenz liefern soll.


Je nachdem, wie der Zugriff auf den Cassandra-Cluster erfolgt, verhält sich Cassandra wie ein AP- oder CP-System (s. letzter Blogeintrag). Wichtig: Die Partitionstoleranz lässt sich nicht aufgeben. Man kann effektiv nur an A (Verfügbarkeit) und C (Konsistenz) ‘schrauben’.


Was genau verstehen wir nun aber unter Konsistenz? Das hängt davon ab, ob wir von Lese- oder Schreibprozessen reden.


Bei Leseprozessen wird das Konsistenzniveau dadurch bestimmt, wie viele Daten-Repliken den Leseprozess als erfolgreich vollzogen zurückmelden müssen. Je mehr Rückmeldungen stattfinden, desto höher ist die Latenz.


Bei Schreibprozessen achten wir darauf, wie viele Repliken einen erfolgreichen Schreibprozess zurückmelden sollen. Je weniger, desto schneller läuft die Datenbank. Interessant ist hier, dass es nicht darum geht, wie viele Repliken tatsächlich neu geschrieben werden. Cassandra beschreibt ohnehin alle Partitionen, Cluster und Datencenter. Es geht wirklich nur um die Rückmeldung.


Um entscheiden zu können, ob die Daten konsistent sind, wenden wir folgende Formel an:

Write ConsistencyLevel (WCL) + Read ConsistencyLevel (RCL) > Replication Factor (RF)


WCL=3 bedeutet, dass der Schreibprozess abgeschlossen ist, sobald drei Repliken die Information erhalten haben. Reziprok heisst RCL=3, dass der Leseprozess abgeschlossen ist, sobald drei Repliken als gelesen gelten. RF=3 heisst, dass im ganzen Cluster drei Repliken vorhanden sind.


WCL + RCL > RF bedeutet, dass es mindestens eine Replik gibt, die mit aktuellen Daten beschrieben und auch wieder gelesen wurde. Wäre WCL + RCL = RF, bestünde die Gefahr, dass die aktuellste Replik ignoriert wird.


Rechenbeispiel: Existieren drei Repliken (RF=3), so muss eine Applikation mit höchster Schreibgeschwindigkeit (“schreibkritisch”, WCL=1) einen RCL von 3 aufweisen.


Indem wir den Konsistenzfaktor schreib- und leseseitig anpassen, erreichen wir, dass Cassandra exakt den Projektanforderungen entspricht. Wünscht sich also ein Kunde, dass z.B. für eine mobile App höchste Lesegeschwindigkeit erreicht wird, erreichen wir das, indem wir leseseitig die benötigte Konsistenz quasi “erzeugen”, und vice versa. Das Gute dabei ist, dass wir nicht nur die ganze Datenbank, sondern auch einzelne Operationen individuell anpassen können. Damit erzielen wir die Mischung aus C, A und P, welche unseren Kunden optimal bedient. Darin liegt eine der Schönheiten von Cassandra.


Rufen Sie uns an unter +41 32 625 76 76, um mit einem Cassandra-Spezialisten zu sprechen.