Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Apache Cassandra Grundkurs

Batches

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Erfahren Sie, wie Sie Synchronisationsproblemen im denormalisierten Datenmodell mit Hilfe von Batches begegnen können.
06:38

Transkript

Das denormalisierte und damit redundante Datenmodell in Cassandra erfordert des Öfteren, dass Änderungen an den Daten einer Tabelle auch entsprechend in anderen Tabellen durchgeführt werden. Um die Daten konsistent zu halten, wäre es schön, wenn man dafür sorgen könnte, dass diese Änderungen atomar durchgeführt werden. Für diesen Zweck gibt es Batches. Batches erlauben Änderungen an mehreren Partitionen. Dabei sind nur Statements erlaubt, die Daten ändern, also "INSERT", "UPDATE" und "DELETE". Batches sind atomar, d. h., sofern eine Batch akzeptiert wird, werden alle enthaltenen Statements früher oder später ausgeführt werden. Alle Änderungen zu einem bestimmten Partition Key laufen isoliert ab. Diese Garantie besteht nicht bei Änderungen an verschiedenen Partitionen. Sofern Sie mehrere Partitionen ändern, kann es sein, dass diese Änderungen gelesen werden können, bevor die Batch abgeschlossen ist. Batches sind keine Transaktionen. Sie verfügen also bspw. über keinen Rollback. Sie können aber LWTs, also leichtgewichtige Transaktionen, enthalten. Mehrere LWTs in einer Batch müssen sich aber auf die gleiche Partition beziehen. Wenn Sie in einer Batch Modifikationen und Counters vornehmen wollen, müssen Sie eine Counter Batch schreiben. Diese darf dann auch nur Modifikationen an Counters enthalten. Batches sind besonders gut für folgende Anwendungszwecke geeignet: Szenarien, in denen viele Updates auf einer Partition stattfinden, die Synchronisierung mehrerer Tabellen, wie eingangs erwähnt. Batches sind explizit nicht dafür geeignet, Bulk Loading, also das massenhafte Laden von Datensätzen, zu betreiben. Für diesen Einsatzzweck ist das Verfahren nicht gedacht und nicht effizient genug. Eine Batch wird durch die Coordinator Node orchestriert. Dadurch wird auch die notwendige Kommunikation von Client mit Coordinator Node verringert. Die Coordinator Node erstellt ein Batchlog, das die zur Abarbeitung der Batch notwendigen Vorgänge enthält und an zwei weiteren Nodes repliziert wird. Danach wird dieses Batchlog abgearbeitet und bei Erfolg wieder von den anderen beiden Nodes gelöscht. Sofern die Coordinator Node ausfällt, können die anderen beiden Nodes nach einer gewissen Wartezeit einspringen und mit der Abarbeitung fortfahren. Sehen wir uns das Ganze einmal auf der CQL-Shell an. Dazu erstellen wir zunächst eine Tabelle, "CREATE TABLE produkte" mit folgenden Spalten. Wir brauchen eine Artikelnummer vom Typ "int", und das ist gleichzeitig unser Primary Key. Wir brauchen einen Herstellernamen vom Typ "text". Wir möchten auch einen Produktnamen haben, auch vom Typ "text", und die Features als Liste von "text". Damit haben wir auch schon unsere erste Tabelle. Hier fügen wir gleich mal unser erstes Produkt ein, das ich bereits vorbereitet habe. Wir haben hier einen Samsung Fernseher ABC5000 mit den Features 200 Hz und Dolby Surround. Jetzt erstellen wir uns eine zweite Tabelle, "CREATE TABLE". Die nennen wir "artikel_by_feature". Diese Tabelle kann man sich jetzt als eine Art manuell erstellten Index vorstellen, sofern wir jetzt nach Features suchen wollen und die zugehörigen Artikel herausfinden möchten, d. h., wir beginnen bei den Spalten mit einem einzelnen Feature vom Typ "text" und behalten die Artikelnummer vom Typ "int" sowie den Hersteller auch vom Typ "text" und dem Produktnamen vom Typ "text". Jetzt müssten wir noch einen Primärschlüssel definieren. "PRIMARY KEY" ist jetzt zusammengesetzt aus dem Feature und der Artikelnummer. Noch die Tabelle abschließen. Jetzt müssen wir die beiden Kombinationen aus Feature und Artikelnummer in unsere neue Tabelle einfügen. Das habe ich hier auch schon vorbereitet. Und wir sehen, wir bekommen zwei Zeilen, nämlich einerseits Artikelnummer "1" und Feature "200 Hz", andererseits Artikelnummer "1" und Feature "Dolby Surround". Was wir jetzt also gerade gemacht haben, ist, drei Inserts durchzuführen, wobei die letzten beiden Inserts vom ersten abhängen, d. h., sobald ein weiteres Produkt in unserer Tabelle "Produkte" hinzugefügt wird bzw. ein bestehendes Produkt geändert wird, müsste im selben Atemzug unsere zweite Tabelle "Artikel by Feature" aktualisiert werden. Solange die zweite Tabelle nicht aktualisiert wird, ist die Datenbank inkonsistent. D.h., was können wir tun, um dem vorzubeugen? Wir können eine Batch schreiben. Und das ist tatsächlich ein sehr einfacher Vorgang. Wir beginnen mit "BEGIN BATCH". Jetzt können wir einerseits unser Produkt in die Produkttabelle einfügen und andererseits die beiden Features, die wir hier hinzufügen, in die Tabelle "Artikel by Feature" einfügen. Wir fügen also ein Produkt mit Artikelnummer "2" vom Hersteller Philips ein, mit "200 Hz" und "ambilight" als Features. Und diese Feature- bzw. Artikelnummer-Kombination fügen wir dann in die Tabelle "Artikel by Feature" ein. Einmal mit "Enter" bestätigen und wir sehen, die Shell wartet noch auf etwas, nämlich auf den Abschluss des Batch-Statements. Das machen wir mit "APPLY BATCH", schicken es ab. Und jetzt können wir einen Blick darauf werfen, was in den Tabellen steht, "SELECT * from produkte". Unser zweites Produkt ist da, nämlich der Philips Fernseher. Und wir können auch in die andere Tabelle schauen, "SELECT * from artikel_by_feature". Und auch hier haben wir die neuen Feature- bzw. Artikelnummer-Kombinationen gesetzt. Damit können wir unsere Tabellen aufräumen, "DROP TABLE produkte" und "DROP TABLE artikel_by_feature". In diesem Video haben Sie erfahren, was eine Batch ist und wie Sie damit verschiedene Tabellen synchron halten können. Sie wissen nun, dass eine Batch per Batchlog vor Ausfall gesichert ist und von verschiedenen Nodes abgearbeitet werden kann.

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!