Apache Cassandra ist eines der beliebtesten verteilten Open-Source-Datenbanksysteme. Es wurde mit dem Ziel entwickelt, große Datenmengen zu verarbeiten, die auf vielen Servern gespeichert sind, die über verschiedene Regionen verteilt sind, und bietet gleichzeitig eine hohe Skalierbarkeit und Verfügbarkeit ohne einen einzigen Ausfallpunkt. Cassandra-Systeme können sich über mehrere Rechenzentren erstrecken, was eine niedrige Latenz für alle verbundenen Clients ermöglicht.
Dies ist eine dreiteilige Tutorialserie, in der ich mit den Grundlagen von Cassandra beginnen möchte. CQLSH wird zum Erstellen von Tabellen und Datensätzen verwendet. Dann erkläre ich die verschiedenen Datentypen, die von Cassandra unterstützt werden, und dann verwenden wir eine Go-Client-Bibliothek, um Cassandra-Operationen programmgesteuert abzuwickeln.
In diesem ersten Teil werde ich beschreiben, wie das Cassandra-Datenmodell in Kürze dargestellt wird, und grundlegende Operationen mit CQLSH ausführen.
Für diese Tutorialreihe gehe ich davon aus, dass Leser Cassandra je nach Betriebssystem auf ihren jeweiligen Maschinen installieren können.
Das Cassandra-Datenmodell folgt dem Spaltenfamilienansatz, der leicht als analog zu einer relationalen Tabellenstruktur verstanden werden kann, jedoch auf NoSQL-Weise. Die folgende Beschreibung sollte es klarer machen:
Ein Schlüsselbereich kann als äußerster Container für Daten in Cassandra angesehen werden. Alle Daten in Cassandra sollten sich in einem Schlüsselbereich befinden. Es kann als Datenbank in RDBMS betrachtet werden, bei der es sich um eine Sammlung von Tabellen handelt. Im Fall von Cassandra ist ein Schlüsselbereich eine Sammlung von Spaltenfamilien.
Eine Spaltenfamilie kann als eine Sammlung von Zeilen betrachtet werden, und jede Zeile ist eine Sammlung von Spalten. Es ist analog zu einer Tabelle in RDBMS, weist jedoch einige Unterschiede auf. Die Spaltenfamilien sind definiert, aber es ist nicht erforderlich, dass jede Zeile über alle Spalten verfügt, und Spalten können bei Bedarf hinzugefügt oder aus einer Zeile entfernt werden.
Die Spalte ist die Basiseinheit von Daten in Cassandra. Es gibt drei Werte: Schlüssel- oder Spaltenname, Spaltenwert und Zeitstempel.
Eine Superspalte ist eine spezielle Art von Spalte, in der eine Abbildung anderer Unterspalten gespeichert ist. Es vereinfacht das Speichern komplexer Daten und beschleunigt das Abrufen von Daten, da jede Spaltenfamilie in Cassandra in einer einzigen Datei im Dateisystem gespeichert wird.
CQLSH ist die Standard-Shell für die Interaktion mit Cassandra über CQL (Cassandra Query Language). CQL ist SQL sehr ähnlich (wird meistens für RDBMS verwendet) und macht es Entwicklern von Cassandra daher sehr leicht, schnell damit zu arbeiten. CQLSH wird mit jedem Cassandra-Paket geliefert und sollte bei der Installation von Cassandra bereits auf Ihrem Computer installiert sein.
Wie wir in dem oben beschriebenen Datenmodell gesehen haben, a Keyspace
ist der äußerste Container und sollte vor allem anderen erstellt werden. Um es zu erstellen, führen Sie Folgendes aus:
$ cqlsh localhost -e "ERSTELLEN SIE KEYSPACE, WENN NICHT EXISTS k1 WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1' UND durable_writes = true;"
In dem obigen Befehl habe ich angenommen, dass Ihre Cassandra existiert localhost
ohne Benutzerauthentifizierung. Ich habe eine erstellt Keyspace
namens k1
mit Replikation
und durable_writes
Politik definiert.
Wenn Sie die Benutzerauthentifizierung definiert haben, können Sie Folgendes ausführen:
$ cqlsh -u-p localhost -e "CREATE KEYSPACE WENN NICHT EXISTS k1 WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1' UND durable_writes = true;"
Ersetzen Sie im obigen Befehl
und
mit Ihren Anmeldeinformationen.
Einen Befehl wie diesen auszuführen, kann etwas umständlich sein. Eine andere Möglichkeit besteht darin, die CQLSH-Eingabeaufforderung zu starten und Abfragen direkt darin auszuführen.
$ cqlsh -u-p localhost Verbunden mit dem Testcluster um 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.9 | CQL-Spezifikation 3.4.2 | Eigenes Protokoll v4] Verwenden Sie HELP, um Hilfe zu erhalten. cassandra @ cqlsh> CREATE KEYSPACE WENN NICHT EXISTS K1 WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1' UND durable_writes = true;
Ich werde die obige Methode zum Ausführen von Abfragen verwenden. Bevor Sie eine andere Abfrage ausführen, müssen Sie CQLSH mitteilen, welcher Schlüsselbereich verwendet werden soll.
cassandra @ cqlsh> USE k1; cassandra @ cqlsh: k1>
Das replication_factor
für einen Schlüsselbereich kann geändert werden, wie viel Replikation gemäß der Replikation erforderlich ist Klasse
.
cassandra @ cqlsh: k1> ALTER-KEYSPACE "k1" WITH REPLICATION = 'class': 'SimpleStrategy', 'replication_factor': 3;
Eine Tabelle entspricht einer Spaltenfamilie in Cassandra. Cassandra unterstützt viele verschiedene Datentypen zum Speichern von Daten, auf die ich im nächsten Teil dieser Tutorialserie detailliert eingehen werde. Um eine Tabelle zu erstellen, führen Sie einfach die TABELLE ERSTELLEN
Befehl.
cassandra @ cqlsh: k1> CREATE TABLE Person (ID-Text, Name-Text, Nachname-Text, PRIMARY KEY (ID));
So prüfen Sie, wie die Struktur der Tabelle nach der Erstellung aussieht:
cassandra @ cqlsh: k1> Person beschreiben; CREATE TABLE k1.person (ID-Text PRIMARY KEY, Name, Nachname, Nachname) WITH bloom_filter_fp_chance = 0.01 AND caching = 'keys': 'ALL', 'rows_per_partition': 'NONE' AND comment = "AND compaction = ' Klasse ':' org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy ',' max_threshold ':' 32 ',' min_threshold ':' 4 ' UND Komprimierung = ' chunk_length_in_kb ':' 64 ',' class ':' org.apache.cassandra.io.compress.LZ4Compressor ' AND crc_check_chance = 1.0 AND dclocal_read_repair_chance = 0,1 AND default_time_to_live = 0 AND g________lohn = 864000 UND max_index_interval = 2048 ';
Angenommen, wir möchten die Tabelle ändern, um auch die E-Mail der Person zu speichern.
cassandra @ cqlsh: k1> ALTER TABLE Person E-Mail-Text hinzufügen; cassandra @ cqlsh: k1> Person beschreiben; CREATE TABLE k1.person (ID-Text PRIMARY KEY, E-Mail-Text, Name, Nachname, Nachname) WITH bloom_filter_fp_chance = 0.01 AND caching = 'keys': 'ALL', 'rows_per_partition': 'NONE' AND comment = "AND compaction = 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4' AND compression = 'chunk_length_in_kb': '64', 'class ':'. '.'. '.'. '' '' '' '' '.' '' '' '' '' '' '' '' '"" "" "" Modus "" "" "" "" "" "" "" "" "" "" "Produkt" "" "" "" "" "" "" "" "" "" "" Produkt "" "" "" "" "" "" "" "" "" "" "" Produkt "" "" "" "" "" "" "" "" "" "" "" "" Produkt "" "" "" "" "" "" "" "" "" "" "" Produkt "" "" "" "" "" "" "" "" "" "" "" "Produkt" "" "" "" "" "" "" "" "" "" "" "" "Produkt" "" "" "" "" "" "" "" "" "" "" "" "Produkt" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "Auge Gesicht» Vor Preis-Bedingungen-Bedingungen = '99PERCENTILE';
Das Einfügen von Daten in eine Cassandra-Tabelle mit CQL ist ziemlich einfach.
cassandra @ cqlsh: k1> SELECT * FROM person; id | E-Mail | name | Nachname ---- + ------- + ------ + --------- (0 Zeilen) cassandra @ cqlsh: k1> INSERT INTO Person (ID, Vorname, Nachname, E-Mail) WERTE ('001', 'Shalabh', 'Aggarwal', '[email protected]'); cassandra @ cqlsh: k1> SELECT * FROM person; id | E-Mail | name | Nachname ----- + ------------------------- + --------- + --- ------- 001 | [email protected] | Shalabh | Aggarwal
In dieser Tabelle haben wir alle Felder nur für einen Datentyp. Die Dinge werden etwas komplexer, wenn wir unterschiedliche Datentypen oder zusammengesetzte Datentypen verwenden. Dies wird eine Diskussion im nächsten Teil dieser Serie sein.
Angenommen, wir möchten den Wert in der Spalte aktualisieren Email
zu etwas anderem.
cassandra @ cqlsh: k1> UPDATE person SET email = "[email protected]" WO; cassandra @ cqlsh: k1> SELECT * FROM person; id | E-Mail | name | Nachname ----- + -------------------------- + --------- + ------ ---- 001 | [email protected] | Shalabh | Aggarwal
Daten in einer Tabelle können einfach mit abgerufen werden WÄHLEN
Aussagen.
Lassen Sie uns noch einige Datensätze einfügen und sie abfragen.
cassandra @ cqlsh: k1> EINFÜGEN IN Person (ID, Vorname, Nachname, E-Mail-Adresse) WERTE ('002', 'John', 'Doe', '[email protected]'); cassandra @ cqlsh: k1> EINFÜGEN IN Person (ID, Vorname, Nachname, E-Mail-Adresse) WERTE ('003', 'Harry', 'Potter', '[email protected]'); cassandra @ cqlsh: k1> SELECT * von person; id | E-Mail | name | Nachname ----- + -------------------------- + --------- + ------ ---- 002 | [email protected] | John | Doe 001 | [email protected] | Shalabh | Aggarwal 003 | [email protected] | Harry | Potter (3 Zeilen) cassandra @ cqlsh: k1> SELECT name FROM person WHERE; name --------- Shalabh (1 Zeilen) cassandra @ cqlsh: k1> SELECT name FROM person WHERE id IN ('001', '002'); Name --------- Shalabh John (2 Zeilen)
Auch komplexere Abfrageoperatoren wie Ungleichheitsoperatoren können verwendet werden oder mehrere WOHER
Bedingungen können mit verkettet werden UND
/ODER
, usw.
Cassandra ist eines der beliebtesten NoSQL-Datenbanksysteme, das zur Verfügung steht, und ist das beste Werkzeug, um in verteilten Umgebungen verwendet zu werden. Der Umgang mit Cassandra ist für Anfänger mit einigen Kenntnissen in RDBMS und SQL recht einfach.
CQL ist SQL in gewissem Maße sehr ähnlich, und CQLSH vereinfacht das Testen und Debuggen erheblich. Im nächsten Teil dieser Serie werde ich die verschiedenen von Cassandra bereitgestellten Datentypen und den Umgang mit ihnen behandeln.