Apache Cassandra Grundkurs

Leichtgewichtige Transaktionen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Auch wenn Cassandra keine klassischen Transaktionen implementiert, besteht die Möglichkeit, sogenannte "Lightweight Transactions" zu nutzen. Lassen Sie sich anhand dieses Films erklären, welche Anwendungsfälle Sie damit abdecken können.
07:11

Transkript

Auch wenn Cassandra keine Transaktionen im klassischen Sinne implementiert, gibt es einige Situationen, in denen mehrere Befehle atomar ablaufen müssen. Für diese Situationen gibt es in Casandra leichtgewichtige Transaktionen. Lightweight Transactions oder Kurz LWT. Diese Transaktionen sind auf eine Partition limitiert und bestehen stets aus 2 Schritten. "compare and set". Also zunächst Daten lesen und anschließend schreiben. Sofern eine Transaktion fehlschlägt, zeigt Cassandra den Grund dafür an. Im Hintergrund implementiert Cassandra eine abgewandelte Form des Paxos-Algorithmus Das ist ein Algorithmus, der in verteilten Systemen eingesetzt wird, um einen Konsens zu finden. Im Kontext LWT bedeutet das, das Cassandra mit Hilfe dieser Paxos Implementierung, für jede Transaktion einen Transaktionsleader findet, und nach dem Paxos-Protokoll mit den Replikas kommuniziert um die Transaktion zu synchonisieren. Da Paxos ein recht kommunikationsintensives Protokoll ist, sollten sie berücksichtigen, dass selbst diese leichtgewichtigen Transaktionen nicht sonderlich günstig sind. Lassen sie uns LWT auf der CQL-Shell nachvollziehen. Dazu erstellen wir uns zunächst eine Tabelle, "CREATE TABLE mitarbeiter", mit folgenden Spalten. Wir verwenden eine ID in Textform. Das ist unser PRIMARY KEY. Wir brauchen eine Spalte "name" vom Typ "text". Wir brauchen außerdem eine Spalte, "vorname", ebenfalls vom Typ "text". Ein "passwort" für unsere Mitarbeiter, auch "text". Und ein "reset_token", auch vom Typ "text". Dieses Token muss der Mitarbeiter dann mit angeben, wenn er sein Passwort ändern möchte. Und die Tabelle ist erstellt. Jetzt wollen wir gleich mal zwei Mitarbeiter einfügen Diese habe ich schon vorab vorbereitet. Wir haben einerseits Friedrich Huber, mit der ID "huber-fritz", und andererseits Hans Maier, mit der ID "maier-hans". Jetzt wollen wir einen neuen Mitarbeiter einfügen. Also "INSERT INTO mitarbeiter", folgende Spalten, "id, name, vorname, passwort". Folgende Werte soll der MItarbeiter mitbringen. Seine ID ist 'huber-fritz'. Das liegt daran, dass er auch tatsächlich so heißt. Also 'Huber, Fritz' und sein Passwort heißt: 'DerCooleFritz'. An dieser Stelle müssen wir aber vorsichtig sein. Wir möchten nämlich nicht das Risiko eingehen, andere Mitarbeiter zu überschreiben. Das heißt, wir müssen eine Vorkehrung treffen, damit bereits vergebene IDs, nicht überschrieben werden. Und das können wir mit einer LWT machen. Wir können jetzt nämlich eine Bedingung angeben "Füge diesen Datensatz nur ein, wenn er noch nicht existiert." IF NOT EXISTS Und wir sehen die Antwort von Cassandra. Sobald man eine Transaktion, also eine LWT durchführen möchte, und diese Transaktion fehlschlägt, bekommt man hier eine Tabelle als Antwort, mit der ersten Spalte "[applied]". Wir sehen "[applied] False". Es gab also ein Problem, und auf der rechten Seite der Tabelle sehen wir, es gibt bereits einen Datensatz mit der besagten ID "huber-fritz". Es ist nämlich der Huber Friedrich. Alles klar, kein Problem. Wir können ja noch einmal die Daten einfügen, diesmal darauf achten, dass wir eine neue ID vergeben. Also, "INSERT INTO values" diesmal, 'huber-fritz2' Und wir schreiben wieder: "IF NOT EXISTS". Und wir sehen diesmal, "[applied] True", diesmal passt also alles. Sehen wir uns das Ganze noch einmal zur Sicherheit in der Tabelle an. "SELECT * FROM mitarbeiter". Und wir sehen, der Huber Fritz, wurde jetzt richtig eingefügt. Mit der neuen ID, 'huber-fritz2'. Jetzt wollen wir etwas anderes probieren. Hans Maier möchte sein Passwort ändern. Kein Problem. Wir starten ein UPDATE-Statement "UPDATE mitarbeiter". Und zwar möchten wir das Passwort setzen. "SET Passwort = 'Neues Passwort' ". Natürlich ein hochsicheres Passwort. Und wir möchten aber gleichzeitig das "reset_token" neu setzen. Das soll ja nicht gleich bleiben. "so2er6nZ" beispielsweise. Und dieses Update möchten wir durchführen, an der Stelle an der die ID gleich "maier-hans" ist. Wir möchten das Ganze aber natürlich nur dann durchführen, wenn Maier Hans das richtige "reset_token" kennt, Das heißt, wir können auch hier wieder eine LWT benutzen, um eine Bedingung anzugeben. Wenn das "reset_token" gleich, beispielsweise "wet5ZUr4" ist, nur dann soll diese Transaktion stattfinden. Wir simulieren hier erst einmal, dass Maier Hans sein "reset_token" nicht wirklich kennt, und diese Transaktion sollte fehlschlagen. Und tatsächlich, wir sehen, "[applied] False". Das liegt daran, dass das "reset_token", das in der Bedingung angegeben wurde, nicht dem tatsächlichen "reset_token", von Hans Maier entspricht. Ok, machen wir das Ganze noch einmal richtig. Wir schreiben also "UPDATE mitarbeiter, SET Passwort = 'NeuesPasswort' " Das "reset_token" setzen wir auch neu. Wieder an der Stelle, ID = "maier-hans", aber diesmal geben wir das richtige "reset_token" ein. Wir nehmen nämlich "mngfTo95". Und wie erwartet wurde die Transaktion angenommen. Prüfen wir das Ganze noch einmal mit einem SELECT-Statement. "SELECT * FROM mitarbeiter" Und wir sehen, das Passwort wurde korrekt resetet, mitsamt "reset_token". Jetzt können wir wieder aufräumen und die Tabelle "mitarbeiter" löschen. "DROP TABLE mitarbeiter" In diesem Video haben sie gelernt, dass sie mit Cassandra einfache Transaktionen umsetzen können. Sie wissen nun, dass diese Transaktionen jeweils auf eine Partition beschränkt sind und dass sie stets aus einer Lese- und einer Schreiboperation bestehen. Sie haben außerdem gelernt, dass diese LWTs, trotz ihres Namens, vergleichsweise kommunikationsintensiv sind und dementsprechend immer mit der Auswirkung auf die Performance im Hinterkopf eingesetzt werden sollten.

Apache Cassandra Grundkurs

Lernen Sie, wie Sie Apache Cassandra als hoch verfügbare und skalierbare Datenbank einsetzen können.

2 Std. 11 min (26 Videos)
Derzeit sind keine Feedbacks vorhanden...
Exklusiv für Abo-Kunden
Erscheinungsdatum:24.02.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!