În prima parte a acestei serii de tutorial am acoperit foarte multe elemente de bază ale Cassandrei și am folosit CQLSH pentru a comunica cu sistemul de baze de date prin shell. În această a doua parte, voi prezenta pe scurt principalele tipuri de date disponibile în CQL. Apoi voi acoperi esențele lui gocql
, un pachet client Golang care implementează driverul Cassandra pentru Golang. Voi descrie cum să creați o conexiune de sesiune cu Cassandra cu câteva opțiuni de configurare și apoi să rulați diverse interogări utilizând sesiunea.
Cassandra oferă suport pentru tipurile de date de bază care sunt disponibile în aproape toate sistemele de baze de date. În afară de aceasta, oferă și tipuri de colecții complexe care pot stoca combinații de date simple sub formă de listă, set și hartă. În afară de aceasta, CQL are, de asemenea, suport pentru tipurile definite de utilizator, permițând dezvoltatorilor să aibă propriile tipuri de date care sunt ușor de citit și de înțeles.
Adevărat
sau fals
.INTRODUCE
instrucțiuni permise într-un tabel cu coloană (coloane) contra; numai ACTUALIZAȚI
poate fi utilizat. De exemplu:> Crearea tabelului site_tracker (id int KEY PRIMARY, text url, număr de vizitator_count); > UPDATE site_tracker SET visitor_count = vizitator_count + 1 WHERE id = 1; > SELECT * FROM site-ul web; id | url | numărătoare ---- + ------ + ------ 1 | a.com | 1 (1 rânduri)
aaaa-ll-zz
.01: 02: 03.123
și stocate întregul număr semnal pe 64 de biți, care reprezintă nanosecunde scoase din miezul nopții.2016-12-01 01: 02: 03.123
.> ALTER TABLE site_tracker ADD tagsSet set; > UPDATE site_tracker SET tagSet = 'tag1' WHERE id = 1; > Tagurile SELECTSet FROM site_tracker WHERE id = 1; tagSet ---------- 'tag1'> UPDATE site_tracker SET taguriSet = tagsSet + 'gat2' WHERE id = 1; > Tagurile SELECTSet FROM site_tracker WHERE id = 1; tagsSet ------------------ 'gat2', 'tag1'
Puteți utiliza operațiile de setare obișnuite, cum ar fi diferență
pentru a elimina elementele. Pentru a șterge sau înlocui setul complet, faceți SET tags =
.
> ALTER TABLE site_tracker ADD tagsList list; > UPDATE site_tracker SET tagsList = ['tag1'] WHERE id = 1; > SELECT tagsList din site_tracker WHERE id = 1; tagsList ---------- ['tag1']> UPDATE site_tracker SET tag-uriList = tagsList + ['gat2'] WHERE id = 1; > SELECT tagsList din site_tracker WHERE id = 1; tagsList ------------------ ['tag1', 'gat2']
Într-o listă, valorile pot fi prefixate, scăzute (ca în seturi), inserate / înlocuite / șterse după valoarea indexului (SET tag-uri [1] = '
), etc.
> ALTER TABLE site_tracker ADD tagsMap map; > UPDATE site_tracker SET tagMap = 'tag1': 'Tag One' WHERE id = 1; > SELECT tag-uriMap FROM site_tracker WHERE id = 1; tagsMap ---------------------- 'tag1': 'Tag One'> UPDATE site_tracker SET tag-uri ['tag2'] = 'Tag Two' WHERE id = 1; > SELECT tag-uriMap FROM site_tracker WHERE id = 1; tagsMap ------------------ 'tag1': 'Tag One', 'tag2': 'Tag Two'
Este posibil în Cassandra să ne definim propriile noastre tipuri. Acest lucru oferă o mare flexibilitate și facilitează întreținerea generală a datelor. Să presupunem că dorim să stocăm adresa de înregistrare a site-ului web.
> Adresa CREATE TYPE (... text de stradă, ... text de oraș, ... text de stare); > ALTER TABLE site_tracker ADD adresă reg_address;
Pentru a utiliza un tip definit de utilizator într-o colecție imbricată, trebuie să îl specificăm ca o îngheţat
Colectie.
> ALTER TABLE site_tracker ADD reg_addresses hartă>;
Presupun că aveți cunoștințe despre utilizarea lui Golang și configurarea și instalarea pachetelor.
Pentru a instala gocql
pachet, executați următoarea comandă din shell:
$ go get github.com/gocql/gocql
Acum voi crea un script Go, care va explica conceptele necesare pentru a înțelege gocql
.
importul pachetului principal ("github.com/gocql/gocql" "log" "time") func PerformOperations () // Furnizați aici instanța clusterului cassandra. cluster: = gocql.NewCluster ("127.0.0.1") // Autentificatorul este necesar dacă autentificarea parolei este activată pentru instalarea dvs. Cassandra. Dacă nu, acest lucru poate fi eliminat. cluster.Authenticator = gocql.PasswordAuthenticator Nume de utilizator: "some_username", Parola: "some_password", // gocql cere ca spațiul de chei să fie furnizat înainte de crearea sesiunii. În viitor ar putea exista dispoziții pentru a face acest lucru mai târziu. cluster.Keyspace = "keyspace_name" // Acesta este timpul după care crearea unui apel de sesiune ar fi expirat. // Aceasta poate fi personalizată după cum este necesar. cluster.Timeout = 5 * time.Second cluster.ProtoVersion = 4 sesiune, err: = cluster.CreateSession () dacă err! = nil log.Fatalf ("Nu s-a putut conecta la clusterul cassandra:% v", err) / Verificați dacă tabela există deja. Creați dacă tabelul nu există keySpaceMeta, _: = session.KeyspaceMetadata ("keyspace_name") dacă _, există: = keySpaceMeta.Tables ["person"]; există! = true // Creați o sesiune de tabelă.Query ("CREATE TABLE person (" + text id, text nume, text telefon, "+" PRIMARY KEY (id) : Actualizați tabelul cu ceva dacă există deja. // Inserați înregistrarea în tabel utilizând instrucțiunile pregătite session.Query ("INSERT INTO person (id, nume, telefon) VALUES (?,?,?)", "Shalabh", "Shalabh Aggarwal", "1234567890" ) // DIY: Actualizați înregistrarea existentă // Selectați înregistrarea și executați un proces pe datele obținute var var șir var var șir de telefon dacă err: = session.Query ("SELECT nume, telefon FROM WHERE") Scan (& nume, & telefon) ; err! = nil if err! = gocql.ErrNotFound log.Fatalf ("Query failed:% v", err) log.Printf ("Nume:% v" v ", telefon) / / Fetch mai multe rânduri și rulați procesul peste ele iter: = session.Query (" SELECT name, phone FROM person ") Iter () pentru iter.Scan (& name, & phone) log.Printf (" Iter Nume:% v ", nume) log.Printf (" Iter Phone:% v ", telefon) // DIY: Ștergeți înregistrarea func main () PerformOperations
Cele mai multe dintre conceptele de lucru sunt explicate în codul de mai sus. Unele puncte care merită notate sunt diferitele operațiuni utilizate împreună cu session.Query ()
. În afară de cele trei operații de mai jos, sunt mult mai multe susținute care pot fi văzute în documentație.
Exec ()
: Aceasta ar executa interogarea fără a returna rânduri. Returnează eroarea dacă există.Scan ()
: Aceasta ar executa interogarea în timp ce se copiază valorile coloanelor din primul rând, potrivite în interogare, cu variabilele transmise. Ar arunca orice rânduri în afară de primul.Iter ()
: Aceasta ar executa interogarea și va returna un iterator care ar putea funcționa doar cum ar fi cum Scan ()
lucrează pentru fiecare rând încasat.Pentru a executa scriptul, executați comanda de mai jos în coajă.
$ go run main.go 2017/02/03 12:53:40 Nume: Shalabh Aggarwal 2017/02/03 12:53:40 Telefon: 1234567890 2017/02/03 12:53:40 Iter Nume: Shalabh Aggarwal 2017 / 02/03 12:53:40 Iter Telefon: 1234567890
În această a doua parte a acestei serii de tutorial am acoperit diverse tipuri de date încorporate disponibile cu Cassandra. De asemenea, am văzut cum funcționează tipurile de colecții și cum pot fi utilizate tipurile definite de utilizator pentru a face o schemă globală flexibilă. De asemenea, am văzut cum putem interacționa cu Cassandra programabil în Golang folosind gocql. Acest pachet oferă o mult mai multă funcționalitate care poate fi explorată pe cont propriu.