Im ersten Teil dieser Tutorialserie habe ich die Grundlagen von Cassandra behandelt und CQLSH verwendet, um über eine Shell mit dem Datenbanksystem zu kommunizieren. In diesem zweiten Teil werde ich kurz die wichtigsten in CQL verfügbaren Datentypen behandeln. Dann werde ich auf das Wesentliche eingehen gocql
, ein Golang-Client-Paket, das den Cassandra-Treiber für Golang implementiert. Ich werde darauf eingehen, wie Sie eine Sitzungsverbindung mit Cassandra mit einigen Konfigurationsoptionen erstellen und anschließend verschiedene Abfragen mit der Sitzung ausführen.
Cassandra bietet Unterstützung für grundlegende Datentypen, die in fast allen Datenbanksystemen verfügbar sind. Darüber hinaus bietet es auch komplexe Sammlungstypen, in denen Kombinationen einfacher Daten in Form von Liste, Mengen und Karten gespeichert werden können. Darüber hinaus unterstützt CQL auch benutzerdefinierte Typen, sodass Entwickler über eigene Datentypen verfügen, die leicht lesbar und verständlich sind.
wahr
oder falsch
.EINFÜGEN
Anweisungen, die in einer Tabelle mit Zählerspalten zulässig sind; nur AKTUALISIEREN
kann verwendet werden. Zum Beispiel:> CREATE TABLE website_tracker (id int PRIMARY KEY, URL-Text, Besucherzähler); > UPDATE website_tracker SET besucherzahl = besucherzahl + 1 WHERE id = 1; > SELECT * FROM website_tracker; id | url | count ---- + ------ + ------ 1 | a.com | 1 (1 Reihen)
JJJJ-MM-TT
.01: 02: 03.123
und eine vorzeichenbehaftete 64-Bit-Ganzzahl, die seit Mitternacht vergangene Nanosekunden darstellt.2016-12-01 01: 02: 03.123
.> ALTER TABLE website_tracker ADD tagsSet set; > UPDATE website_tracker SET tagsSet = 'tag1' WHERE id = 1; > SELECT tagsSet FROM website_tracker WHERE id = 1; tagsSet ---------- 'tag1'> UPDATE website_tracker SET tagsSet = tagsSet + 'gat2' WHERE id = 1; > SELECT tagsSet FROM website_tracker WHERE id = 1; tagsSet ------------------ 'gat2', 'tag1'
Sie können die üblichen Set-Operationen wie verwenden Unterschied
Elemente entfernen. Um das komplette Set zu löschen oder auszutauschen, tun Sie SET-Tags =
.
> ALTER TABLE website_tracker ADD-TagsList-Liste; > UPDATE website_tracker SET tagsList = ['tag1'] WHERE id = 1; > SELECT tagsList FROM website_tracker WHERE id = 1; tagsList ---------- ['tag1']> UPDATE website_tracker SET tagsList = tagsList + ['gat2'] WHERE id = 1; > SELECT tagsList FROM website_tracker WHERE id = 1; tagsList ------------------ ['tag1', 'gat2']
In einer Liste können Werte vorangestellt, subtrahiert (wie in Sätzen), nach Indexwert eingefügt / ersetzt / gelöscht werden (SET-Tags [1] = '
), usw.
> ALTER TABLE website_tracker ADD tagsMap-Karte; > UPDATE website_tracker SET tagsMap = 'tag1': 'Tag One' WHERE id = 1; > SELECT tagsMap FROM website_tracker WHERE id = 1; tagsMap ---------------------- 'tag1': 'Tag One'> UPDATE website_tracker SET tagsMap ['tag2'] = 'Tag zwei' WHERE id = 1; > SELECT tagsMap FROM website_tracker WHERE id = 1; tagsMap ------------------ 'tag1': 'Tag eins', 'tag2': 'Tag zwei'
In Cassandra ist es möglich, unsere eigenen Typen zu definieren. Dies gibt viel Flexibilität und vereinfacht die allgemeine Datenpflege. Angenommen, wir möchten die Registrierungsadresse der Website speichern.
> CREATE TYPE-Adresse (… Straßentext,… Stadttext,… Zustandstext); > ALTER TABLE website_tracker ADD reg_address address;
Um einen benutzerdefinierten Typ in einer verschachtelten Auflistung verwenden zu können, müssen Sie ihn als angeben gefroren
Sammlung.
> ALTER TABLE website_tracker ADD reg_addresses map>;
Ich gehe davon aus, dass Sie über Kenntnisse in der Verwendung von Golang sowie über das Konfigurieren und Installieren von Paketen verfügen.
So installieren Sie das gocql
Führen Sie den folgenden Befehl aus der Shell aus:
$ go github.com/gocql/gocql abrufen
Jetzt werde ich ein Go-Skript erstellen, das die zum Verständnis erforderlichen Konzepte erläutert gocql
.
Paket-Hauptimport ("github.com/gocql/gocql" "log" "time") func PerformOperations () // Geben Sie hier die cassandra cluster-Instanz an. cluster: = gocql.NewCluster ("127.0.0.1") // Der Authentifikator ist erforderlich, wenn die // Kennwortauthentifizierung für Ihre Cassandra-Installation aktiviert ist. Wenn nicht, kann dies // entfernt werden. cluster.Authenticator = gocql.PasswordAuthenticator Benutzername: "some_username", Kennwort: "some_password", // Für gocql muss der Schlüsselbereich angegeben werden, bevor die Sitzung erstellt wird. // Möglicherweise gibt es in Zukunft Bestimmungen, um dies später zu tun. cluster.Keyspace = "keyspace_name" // Dies ist der Zeitpunkt, nach dessen Ablauf das Erstellen des Sitzungsaufrufs abläuft. // Dies kann nach Bedarf angepasst werden. cluster.Timeout = 5 * time.econd cluster.ProtoVersion = 4 Sitzung, err: = cluster.CreateSession () if err! = nil log.Fatalf ("Verbindung zu Cassandra-Cluster konnte nicht hergestellt werden:% v", err) / / Prüfen Sie, ob die Tabelle bereits existiert. Erstellen, wenn die Tabelle nicht vorhanden ist keySpaceMeta, _: = session.KeyspaceMetadata ("keyspace_name"), wenn _, vorhanden ist: = keySpaceMeta.Tables ["person"]; exists! = true // Erzeuge eine Tabelle session.Query ("CREATE TABLE person" ("+" ID-Text, Name, Telefontext, "+" PRIMARY KEY (id)) "). Exec () // DIY : Aktualisieren Sie die Tabelle mit etwas, falls es bereits existiert. // Einfügen eines Datensatzes in die Tabelle mit den vorbereiteten Anweisungen session.Query ("INSERT INTO person (id, name, phone) VALUES (?,?,?)", "Shalabh", "Shalabh Aggarwal", "1234567890"). Exec ( ) // DIY: Vorhandenen Datensatz aktualisieren // Datensatz auswählen und einen Prozess für die abgerufenen Daten ausführen. Name der Zeichenfolge var Telefonzeichenfolge, wenn err: = session.Query ("SELECT name, phone FROM person WHERE"). Scannen (& name, & phone) ; err! = nil if err! = gocql.ErrNotFound log.Fatalf ("Abfrage fehlgeschlagen:% v", err) log.Printf ("Name:% v", Name) log.Printf ("Telefon:% v ", phone) // Mehrere Zeilen abrufen und Prozess über sie ausführen iter: = session.Query (" SELECT name, phone FROM person "). Iter () für iter.Scan (& name, & phone) log.Printf (" Iter Name:% v ", Name) log.Printf (" Iter Phone:% v ", Telefon) // DIY: Datensatz löschen func main () PerformOperations ()
Die meisten Arbeitskonzepte werden im obigen Code selbst erläutert. Einige erwähnenswerte Punkte sind die verschiedenen Operationen, die zusammen mit verwendet werden session.Query ()
. Abgesehen von den drei folgenden Vorgängen werden viele weitere unterstützt, die in der Dokumentation zu sehen sind.
Exec ()
: Dadurch würde die Abfrage nur ausgeführt, ohne Zeilen zurückzugeben. Gibt einen Fehler zurück, falls vorhanden.Scan()
: Dies würde die Abfrage ausführen, während die Werte der Spalten aus der ersten in der Abfrage übereinstimmenden Zeile in die übergebenen Variablen kopiert wurden. Es würde alle Reihen außer der ersten verwerfen.Iter ()
: Dies würde die Abfrage ausführen und einen Iterator zurückgeben, der dann wie funktioniert Scan()
funktioniert für jede abgerufene Zeile.Um das Skript auszuführen, führen Sie den folgenden Befehl in der Shell aus.
$ go run main.go 2017/02/03 12:53:40 Name: Shalabh Aggarwal 2017/02/03 12:53:40 Telefon: 1234567890 2017/02/03 12:53:40 Iter Name: Shalabh Aggarwal 2017 / 02/03 12:53:40 Iter Telefon: 1234567890
In diesem zweiten Teil dieser Tutorialserie haben wir verschiedene integrierte Datentypen behandelt, die mit Cassandra verfügbar sind. Wir haben auch gesehen, wie Sammlungsarten funktionieren und wie benutzerdefinierte Typen verwendet werden können, um ein Gesamtschema flexibel zu gestalten. Wir haben auch gesehen, wie wir in Golang mit gocql programmatisch mit Cassandra interagieren können. Dieses Paket bietet viel mehr Funktionen, die Sie selbst erkunden können.