Obwohl die Cassandra-Abfragesprache der SQL-Sprache ähnelt, sind ihre Datenmodellierungsmethoden völlig unterschiedlich.
In Cassandra kann ein schlechtes Datenmodell die Leistung beeinträchtigen, insbesondere wenn Benutzer versuchen, die RDBMS-Konzepte in Cassandra zu implementieren. Beachten Sie am besten einige der unten aufgeführten Regeln.
In diesem Tutorial lernen Sie:
- Cassandra-Datenmodellregeln
- Modellieren Sie Ihre Daten in Cassandra
- Umgang mit einer Eins-zu-Eins-Beziehung
- Umgang mit einer bis vielen Beziehungen
- Umgang mit vielen zu vielen Beziehungen
Cassandra-Datenmodellregeln
In Cassandra sind Schreibvorgänge nicht teuer. Cassandra unterstützt keine Verknüpfungen, Gruppierungen nach, ODER-Klauseln, Aggregationen usw. Daher müssen Sie Ihre Daten so speichern, dass sie vollständig abrufbar sind. Daher müssen diese Regeln bei der Modellierung von Daten in Cassandra berücksichtigt werden.
- Maximieren Sie die Anzahl der Schreibvorgänge
In Cassandra sind Schreibvorgänge sehr billig. Cassandra ist für eine hohe Schreibleistung optimiert. Versuchen Sie also, Ihre Schreibvorgänge zu maximieren, um eine bessere Leseleistung und Datenverfügbarkeit zu erzielen. Es gibt einen Kompromiss zwischen Datenschreiben und Datenlesen. Optimieren Sie also Ihre Datenleseleistung, indem Sie die Anzahl der Datenschreibvorgänge maximieren.
- Maximieren Sie die Datenverdoppelung
Daten-Denormalisierung und Daten-Duplizierung sind defacto von Cassandra. Der Speicherplatz ist nicht teurer als Speicher, CPU-Verarbeitung und E / A-Betrieb. Da Cassandra eine verteilte Datenbank ist, bietet die Duplizierung von Daten eine sofortige Datenverfügbarkeit und keinen einzigen Fehlerpunkt.
Datenmodellierungsziele
Sie sollten beim Modellieren von Daten in Cassandra folgende Ziele verfolgen.
- Verteilen Sie die Daten gleichmäßig im Cluster
Sie möchten eine gleiche Datenmenge auf jedem Knoten des Cassandra-Clusters. Die Daten werden basierend auf Partitionsschlüsseln, die der erste Teil des Primärschlüssels sind, auf verschiedene Knoten verteilt. Versuchen Sie daher, Ganzzahlen als Primärschlüssel für die gleichmäßige Verteilung der Daten im Cluster auszuwählen.
- Minimieren Sie die Anzahl der gelesenen Partitionen, während Daten abgefragt werden
Partition ist eine Gruppe von Datensätzen mit demselben Partitionsschlüssel. Wenn die Leseabfrage ausgegeben wird, werden Daten von verschiedenen Knoten von verschiedenen Partitionen gesammelt.
Wenn es viele Partitionen gibt, müssen alle diese Partitionen besucht werden, um die Abfragedaten zu sammeln.
Dies bedeutet nicht, dass Partitionen nicht erstellt werden sollten. Wenn Ihre Daten sehr groß sind, können Sie diese große Datenmenge nicht auf der einzelnen Partition speichern. Die einzelne Partition wird verlangsamt.
Versuchen Sie also, eine ausgeglichene Anzahl von Partitionen auszuwählen.
Guter Primärschlüssel
Nehmen wir ein Beispiel und finden heraus, welcher Primärschlüssel gut ist.
Hier ist die Tabelle MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));
Im obigen Beispiel Tabelle MusicPlaylist,
- Songid ist der Partitionsschlüssel und
- SongName ist die Clustering-Spalte
- Die Daten werden auf der Basis von SongName geclustert. Mit der SongId wird nur eine Partition erstellt. Die Tabelle MusicPlaylist enthält keine andere Partition.
Der Datenabruf wird von diesem Datenmodell aufgrund des fehlerhaften Primärschlüssels langsam durchgeführt.
Hier ist eine weitere Tabelle MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));
Im obigen Beispiel Tabelle MusicPlaylist,
- Songid und Year sind der Partitionsschlüssel und
- SongName ist die Clustering-Spalte.
- Die Daten werden auf der Basis von SongName geclustert. In dieser Tabelle wird jedes Jahr eine neue Partition erstellt. Alle Songs des Jahres befinden sich auf demselben Knoten. Dieser Primärschlüssel ist für die Daten sehr nützlich.
Unser Datenabruf wird durch dieses Datenmodell schnell sein.
Modellieren Sie Ihre Daten in Cassandra
Folgendes sollte bei der Modellierung Ihrer Abfragen beachtet werden.
- Bestimmen Sie, welche Abfragen Sie unterstützen möchten
- Tritt bei
- Gruppiere nach
- Filtern nach welcher Spalte etc.
- Erstellen Sie eine Tabelle gemäß Ihren Abfragen
Erstellen Sie eine Tabelle gemäß Ihren Abfragen. Erstellen Sie eine Tabelle, die Ihre Fragen erfüllt. Versuchen Sie, eine Tabelle so zu erstellen, dass eine Mindestanzahl von Partitionen gelesen werden muss.
Bestimmen Sie zunächst, welche Abfragen Sie möchten.
Benötigen Sie zum Beispiel?
Umgang mit einer Eins-zu-Eins-Beziehung
Eine Eins-zu-Eins-Beziehung bedeutet, dass zwei Tabellen eine Eins-zu-Eins-Entsprechung haben. Zum Beispiel kann der Student nur einen Kurs anmelden, und ich möchte nach einem Studenten suchen, in welchem Kurs ein bestimmter Student registriert ist.
In diesem Fall sollte Ihr Tabellenschema alle Details des Schülers enthalten, die diesem bestimmten Kurs entsprechen, wie z. B. den Namen des Kurses, die Rollennummer des Schülers, den Namen des Schülers usw.
Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);
Umgang mit einer bis vielen Beziehungen
Eine bis viele Beziehungen bedeuten eine bis viele Entsprechungen zwischen zwei Tabellen.
Zum Beispiel kann ein Kurs von vielen Studenten studiert werden. Ich möchte alle Studenten suchen, die einen bestimmten Kurs studieren.
Wenn ich also nach dem Namen des Kurses frage, habe ich viele Schülernamen, die einen bestimmten Kurs studieren.
Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);
Ich kann alle Studenten für einen bestimmten Kurs durch die folgende Abfrage abrufen.
Select * from Student_Course where Course_name='Course Name';
Umgang mit vielen zu vielen Beziehungen
Viele zu viele Beziehungen bedeuten viele zu viele Entsprechungen zwischen zwei Tabellen.
Zum Beispiel kann ein Kurs von vielen Studenten studiert werden, und ein Student kann auch viele Kurse studieren.
Ich möchte alle Studenten suchen, die einen bestimmten Kurs studieren. Außerdem möchte ich den gesamten Kurs durchsuchen, den ein bestimmter Student studiert.
In diesem Fall habe ich also zwei Tabellen, dh ich teile das Problem in zwei Fälle auf.
Zuerst werde ich eine Tabelle erstellen, anhand derer Sie Kurse eines bestimmten Studenten finden können.
Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);
Ich kann alle Kurse eines bestimmten Studenten anhand der folgenden Abfrage finden. ->
Select * from Student_Course where student_rollno=rollno;
Zweitens werde ich eine Tabelle erstellen, anhand derer Sie feststellen können, wie viele Studenten einen bestimmten Kurs studieren.
Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);
Ich kann einen Studenten in einem bestimmten Kurs anhand der folgenden Abfrage finden.
Select * from Course_Student where Course_name=CourseName;
Unterschied zwischen RDBMS und Cassandra Data Modeling
RDBMS |
Kassandra |
Speichert Daten in normalisierter Form |
Speichert Daten in denormalisierter Form |
Legacy-DBMS; strukturierte Daten |
Wide Row Store, Dynamisch; strukturierte und unstrukturierte Daten |
Zusammenfassung
Die Datenmodellierung in Cassandra unterscheidet sich von anderen RDBMS-Datenbanken. Die Cassandra-Datenmodellierung hat einige Regeln. Diese Regeln müssen für eine gute Datenmodellierung befolgt werden. Neben diesen Regeln haben wir drei verschiedene Datenmodellierungsfälle gesehen und wie man damit umgeht.