Apache Cassandra este unul dintre cele mai populare sisteme de baze de date distribuite open source disponibile. Acesta a fost proiectat cu scopul de a manipula cantități mari de date stocate în multe servere distribuite de-a lungul unor regiuni geografice, oferind în același timp o scalabilitate și disponibilitate ridicată, fără un singur punct de eșec. Sistemele Cassandra pot cuprinde mai multe centre de date, ceea ce permite o latență redusă pentru toți clienții conectați.
Aceasta este o serie de tutoriale în trei părți, unde voi începe cu elementele de bază ale Cassandra, folosind CQLSH pentru a crea tabele și înregistrări. Apoi voi explica diferitele tipuri de date susținute de Cassandra și apoi vom folosi o bibliotecă de clienți Go pentru a gestiona operațiile Cassandra programabil.
În această primă parte voi studia modul în care modelul de date Cassandra este prezentat pe scurt și va efectua operații de bază folosind CQLSH.
Pentru această serie de tutori, presupun că cititorii ar putea să instaleze singuri Cassandra pe mașinile respective în funcție de sistemul de operare.
Modelul de date Cassandra urmează abordarea familiei de coloane, care poate fi ușor înțeleasă ca fiind analogă cu o structură de tabelă relațională, dar într-un mod NoSQL. Descrierea de mai jos trebuie să facă mai clară:
Un spațiu de chei poate fi văzut ca cel mai exterior container pentru date din Cassandra. Toate datele din Cassandra ar trebui să trăiască în interiorul unui spațiu de chei. Se poate vedea ca o bază de date în RDBMS, care este o colecție de tabele. În cazul Cassandrei, un spațiu de chei este o colecție de familii de coloane.
O familie de coloane poate fi văzută ca o colecție de rânduri și fiecare rând este o colecție de coloane. Este analog cu un tabel din RDBMS, dar are unele diferențe. Familiile de coloane sunt definite, dar nu este necesar ca fiecare rând să aibă toate coloanele, iar coloanele pot fi adăugate sau eliminate dintr-un rând ca și când este necesar.
Coloana reprezintă unitatea de bază de date din Cassandra. Are trei valori: numele cheie sau coloană, valoarea coloanei și o marcă de timp.
O coloană super este un tip special de coloană care stochează o hartă a altor sub-coloane. Aceasta facilitează stocarea datelor complexe și, de asemenea, face ca datele să devină mai rapide, deoarece fiecare familie de coloane din Cassandra este stocată într-un singur fișier din sistemul de fișiere.
CQLSH este shell-ul standard pentru interacțiunea cu Cassandra prin CQL (Cassandra Query Language). CQL este foarte asemănător cu SQL (care este folosit în cea mai mare parte pentru RDBMS) și, prin urmare, îl face foarte ușor dezvoltatorilor noi pentru Cassandra pentru a putea lucra rapid cu acesta. CQLSH este livrat cu fiecare pachet Cassandra și ar trebui să fie deja instalat pe mașina dvs. când ați instalat Cassandra.
Așa cum am văzut în modelul de date descris mai sus, a keyspace
este cel mai exterior container și ar trebui să fie creat înainte de orice altceva. Pentru ao crea, rulați:
$ cqlsh localhost -e "CREATE KEYSPACE DACĂ NU EXISTĂ k1 CU replicare = 'class': 'SimpleStrategy', 'replication_factor': '1' ȘI durable_writes = true;
În comanda de mai sus, am presupus că există Cassandra gazdă locală
fără nicio autentificare a utilizatorului. Am creat o keyspace
denumit k1
cu replică
și durable_writes
politică definită.
Dacă ați definit autentificarea utilizatorului, puteți rula:
$ cqlsh -u-p localhost -e "CREATE KEYSPACE DACĂ NU EXISTĂ k1 CU replicare = 'class': 'SimpleStrategy', 'replication_factor': '1' AND durable_writes = true;
În comanda de mai sus, înlocuiți
și
cu acreditările dvs. de autentificare.
Rularea unei comenzi ca aceasta poate fi cam greoaie. O altă modalitate este de a lansa promptul CQLSH și apoi să rulați interogări direct în el.
$ cqlsh -u-p localhost Conectat la Cluster de testare la 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.9 CQL spec 3.4.2 Protocolul nativ v4] Utilizați HELP pentru ajutor. cassandra @ cqlsh> CREATE KEYSPACE DACA NU EXISTĂ k1 CU replicare = 'class': 'SimpleStrategy', 'replication_factor': '1' ȘI durable_writes = true;
Mergând înainte, voi folosi metoda de rulare de mai sus. Înainte de a executa orice altă interogare, trebuie să le spunem CQLSH care spațiu de chei ar trebui folosit.
cassandra @ cqlsh> USE k1; cassandra @ cqlsh: k1>
replication_factor
pentru o cheie de spațiu poate fi modificată pentru a se potrivi cât de mult este nevoie de replicare ca pe replicare clasă
.
cassandra @ cqlsh: k1> ALTER KEYSPACE "k1" CU REPLICARE = 'class': 'SimpleStrategy', 'replication_factor': 3;
Un tabel este echivalent cu o familie de coloane din Cassandra. Cassandra suportă mai multe tipuri de date diferite pentru stocarea datelor, pe care le voi detalia în următoarea parte a seriei tutorial. Pentru a crea o tabelă, pur și simplu rulați CREATE TABLE
comanda.
cassandra @ cqlsh: k1> CREATE TABLE person (text id, text nume, text de familie, PRIMARY KEY (id));
Pentru a verifica modul în care arată structura tabelului odată creată:
cassandra @ cqlsh: k1> DESCRIBE persoană; CREATE TABLE k1.person (text id PRIMARY KEY, text nume, text de familie) WITH bloom_filter_fp_chance = 0.01 AND caching = 'keys': 'ALL', 'rows_per_partition' class ':' org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy ',' max_threshold ':' 32 ',' min_threshold ':' 4 ' AND compression = ' chunk_length_in_kb ' org.apache.cassandra.io.compress.LZ4Compressor ' ȘI crc_check_chance = 1.0 ȘI dclocal_readair_chance = 0.1 AND default_time_to_live = 0 ȘI gc_grace_seconds = 864000 ȘI max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 ȘI min_index_interval = 128 ȘI read_repair_chance = 0.0 ȘI speculative_retry =' 99PERCENTILE „;
Acum, să spunem că vrem să modificăm masa pentru a stoca și e-mailul persoanei.
cassandra @ cqlsh: k1> ALTER TABLE persoană ADD text email; cassandra @ cqlsh: k1> DESCRIBE persoană; CREATE TABLE k1.person (text id PRIMARY KEY, text email, text nume, text de familie) WITH bloom_filter_fp_chance = 0.01 AND caching = 'keys': 'ALL', 'rows_per_partition': 'NONE' AND comment = = 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4' AND compression = 'chunk_length_in_kb' ':' org.apache.cassandra.io.compress.LZ4Compressor ' ȘI crc_check_chance = 1.0 ȘI dclocal_readair_chance = 0.1 ȘI default_time_to_live = 0 ȘI gc_grace_seconds = 864000 AND max_index_interval = 2048 ȘI memtable_flush_period_in_ms = 0 ȘI min_index_interval = 128 ȘI read_repair_chance = 0.0 AND speculative_retry = '99PERCENTILE';
Introducerea datelor într-o masă Cassandra folosind CQL este destul de simplă.
cassandra @ cqlsh: k1> SELECT * FROM persoană; id | mail | nume | Nume de familie - + ------- + ------ + --------- (0 rânduri) cassandra @ cqlsh: k1> INSERT INTO persoană (id, e-mail) VALORI ("001", "Shalabh", "Aggarwal", "[email protected]"); cassandra @ cqlsh: k1> SELECT * FROM persoană; id | mail | nume | nume de familie ----- + ----------------------------- + --------- + --- ------- 001 | [email protected] | Shalabh | Aggarwal
În acest tabel, avem toate câmpurile pentru un singur tip de date. Lucrurile devin un pic complex atunci când folosim diferite tipuri de date sau tipuri de date compozite. Aceasta va fi o discuție în următoarea parte a acestei serii.
Să presupunem că vrem să actualizăm valoarea din coloană e-mail
la altceva.
cassandra @ cqlsh: k1> UPDATE persoană SET email = "[email protected]" WHERE; cassandra @ cqlsh: k1> SELECT * FROM persoană; id | mail | nume | nume de familie ----- + -------------------------- + --------- + ------ ---- 001 | [email protected] | Shalabh | Aggarwal
Datele dintr-un tabel pot fi interogate pur și simplu utilizând SELECTAȚI
declaraţii.
Hai să introducem mai multe înregistrări și să le întrebăm.
cassandra @ cqlsh: k1> INSERTAȚI ÎN OAMENI (id, nume, prenume, email) VALUES ('002', 'John', 'Doe', '[email protected]'); cassandra @ cqlsh: k1> INSERTAȚI ÎN OAMENI (id, nume, prenume, email) VALUES ('003', 'Harry', 'Potter', '[email protected]'); cassandra @ cqlsh: k1> SELECT * de la persoană; id | mail | nume | nume de familie ----- + -------------------------- + --------- + ------ ---- 002 | [email protected] | John | Doe 001 | [email protected] | Shalabh | Aggarwal 003 | [email protected] | Harry | Potter (3 rânduri) cassandra @ cqlsh: k1> SELECT nume de la persoană WHERE; nume --------- Shalabh (1 rânduri) cassandra @ cqlsh: k1> SELECT nume de la persoană WHERE id IN ('001', '002'); nume --------- Shalabh John (2 rânduri)
Operatorii de interogare mai complexi, cum ar fi operatorii de inegalitate, pot fi de asemenea utilizați sau mai mulți UNDE
condițiile pot fi concatenate folosind ȘI
/SAU
, etc.
Cassandra este una dintre cele mai populare sisteme de baze de date NoSQL disponibile și este cea mai bună construcție pentru a fi utilizată în medii distribuite. Confruntarea cu Cassandra este destul de ușoară pentru începători cu unele cunoștințe despre RDBMS și SQL.
CQL este foarte asemănător cu SQL într-o anumită măsură, iar CQLSH face mult mai ușor de testare și depanare. În următoarea parte a acestei serii, voi acoperi diferitele tipuri de date furnizate de Cassandra și cum să le rezolvați.