Pentru a utiliza Cassandra folosind Docker:
docker pull cassandra
docker run --name cassandradb -d cassandra:latest
Pentru a ne conecta la un server Cassandra putem folosi utilitarul cqlsh (Documentație).
Printre parametrii pe care cqlsh ii permite avem:
-
-
user
- specifica utilizatorul cu care sa se conecteze la Cassandra-
-
password
- specifica parola utilizatorului-
-
keyspace
- precizeaza keyspace-ul la care sa se conecteze-
-
file
- specifica un fisier din care sa se execute comenzi, urmate de exitDeschideti o conexiune la Cassandra ruland comanda:
docker exec -it cassandradb cqlsh
Cateva dintre comenzile ce tin de administrarea keyspace-urilor sunt:
-- listare keyspace-uri disponibile DESCRIBE KEYSPACES; -- afisare keyspace curent DESCRIBE KEYSPACE; -- conectare la un keyspace existent USE <keyspace_name>; -- creare keyspace nou CREATE KEYSPACE <keyspace_name> WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3 }; -- creare keyspace nou fara a scrie operatiile si in commit log CREATE KEYSPACE <keyspace_name> WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3 } AND durable_writes = TRUE; -- stergere keyspace DROP KEYSPACE <keyspace_name>;
Ex. 1. Creati un keyspace cu numele students_keyspace cu durable_writes setat pe true si conectati-va la el.
Pentru a crea un tabel in keyspace-ul curent:
CREATE TABLE <table_name> ( <column_name1> datatype PRIMARY KEY, <column_name2> datatype, <column_name3> datatype, ... )
Pentru a sterge un tabel in keyspace-ul curent:
DROP TABLE <table_name>
Ex. 2. Creati o tabela cu numele students care are coloanele: id de tip INT ca PRIMARY KEY, firstname de tip VARCHAR, lastname de tip VARCHAR, year de tip INT, group de tip VARCHAR.
Pentru a insera date in Cassandra se poate folosi comanda INSERT, asemanator limbajului SQL:
INSERT INTO <table_name> (<column_name1>, <column_name2>....) VALUES (<value1>, <value2>....);
Inserati in tabela students urmatorii studenti:
INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (1, 'Ion', 'Popescu', 4, '342C3'); INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (2, 'Andrei', 'Ionescu', 4, '341C4'); INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (3, 'George', 'Popescu', 4, '341C2'); INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (4, 'Georgiana', 'Petrescu', 4, '341C2'); INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (5, 'Valentina', 'Vasilescu', 3, '331CA'); INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (6, 'Grigore', 'Ionescu', 4, '342C2'); INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (7, 'Andrei', 'Popescu', 3, '332CA'); INSERT INTO students (id, firstname, lastname, YEAR, GROUP) VALUES (8, 'Ana', 'Georgescu', 4, '342C5');
Ex. 3. Inserati in tabela students 2 colegi.
Operatia de selectie a datelor in Cassandra se poate realiza prin comanda SELECT:
SELECT * | select_expression FROM [keyspace_name.] <table_name> [WHERE filters] [ORDER BY column_name1, column_name2... ASC|DESC] [LIMIT N] [ALLOW FILTERING];
Ex. 4. Selectati toti studentii de anul 4 care au prenumele 'Andrei'.
Pentru a modifica datele in Cassandra se foloseste comanda UPDATE:
UPDATE [keyspace_name.] <table_name> SET assignment [, assignment] . . . WHERE row_specification
Ex. 5. Promovati toti studentii din tabela students de anul 3 in anul 4, prin actualizarea coloanei year si group.
Pentru a sterge datele in Cassandra se poate folosi comanda DELETE:
DELETE [column_name (term)][, ...] FROM [keyspace_name.] <table_name> WHERE PK_column_conditions;
Alternativ, se poate folosi comanda TRUNCATE pentru a sterge toate valorile dintr-un tabel:
TRUNCATE [TABLE] [keyspace_name.] <table_name>
Ex. 6. Stergeti din tabela students studentii cu id-urile 1, 3 si 5.
Tipurile colectie sunt utile in cazurile in care avem nevoie sa stocam un numar variabil de elemente intr-o singura coloana.
Cassandra pune la dispozitie urmatoarele tipuri colectie:
Tipul de date set stocheaza o multime de elemente neordonate, care pot fi de tipuri simple, tipuri definite de utilizator sau alte colectii.
Pentru a adauga o coloana de tip set intr-o tabela putem folosi:
ALTER TABLE <table_name> ADD <column_name> SET<data_type>;
Un avantaj al utilizarii setului este posibilitatea de a adauga elemente fara a fi nevoiti sa citim continutul setului intai.
my_set = my_set + { new_element }
Pentru a sterge un element din set se foloseste -:
my_set = my_set - { old_element }
Pentru a seta un set gol se foloseste {}:
my_set = {}
Adaugati la tabela students coloana hobbies de tipul SET<TEXT>:
ALTER TABLE students ADD hobbies SET<TEXT>;
Apoi populati coloana hobbies pentru studentii predefiniti:
UPDATE students SET hobbies = {'Tennis', 'Chess'} WHERE id = 2; UPDATE students SET hobbies = {'Programming', 'Design'} WHERE id = 4; UPDATE students SET hobbies = {'Table Tennis', 'Backgammon'} WHERE id = 6; UPDATE students SET hobbies = {'Football'} WHERE id = 7; UPDATE students SET hobbies = {'Swimming'} WHERE id = 8;
Ex. 7. Adaugati hobby-uri pentru studentii inserati in tabela students la exercitiul 3.
Tipul de date list contine o lista de elemente ordonate. In mod standard, ele sunt ordonate dupa ordinea de inserare.
Pentru a adauga o coloana de tipul list putem folosi:
ALTER TABLE <table_name> ADD <column_name> LIST<data_type>;
my_list = my_list + [ new_element ]
Pentru a sterge un element din lista se poate folosi -:
my_list = my_list - [ old_element ]
Pentru a seta o lista goala se poate folosi []:
my_list = []
Adaugati o coloana de tip lista in tabela students, cu numele languages si tipul LIST<TEXT>:
ALTER TABLE students ADD languages LIST<TEXT>;
Apoi populati coloana languages pentru studentii predefiniti:
UPDATE students SET languages = ['C', 'C++'] WHERE id = 2; UPDATE students SET languages = ['Java', 'Scala'] WHERE id = 4; UPDATE students SET languages = ['Python', 'Go'] WHERE id = 6; UPDATE students SET languages = ['Ruby'] WHERE id = 7; UPDATE students SET languages = ['PHP', 'Javascript'] WHERE id = 8;
Ex. 8. Adaugati limbajul C# pentru studentul cu id-ul 2 la lista de limbaje de programare cunoscute si goliti lista de limbaje de programare cunoscute pentru studentul cu id-ul 8.
Tipul de date map contine o multime de perechi cheie-valoare. Cheile si valorile pot avea orice tip cu exceptia counter.
Pentru a adauga o coloana de tip map intr-o tabela putem folosi:
ALTER TABLE <table_name> ADD <column_name> MAP<data_type_key, data_type_value>;
my_map[my_key] = my_value
Pentru a verifica daca un map contine o valoare putem folosi CONTAINS:
SELECT * FROM my_table WHERE map_column CONTAINS map_value ALLOW FILTERING;
Pentru a verifica daca un map contine o cheie putem folosi CONTAINS KEY:
SELECT * FROM my_table WHERE map_column CONTAINS KEY map_key ALLOW FILTERING;
Adaugati la tabela students coloana grades de tipul MAP<TEXT, DOUBLE>:
ALTER TABLE students ADD grades MAP<TEXT, DOUBLE>;
Apoi adaugati note la studentii predefiniti:
UPDATE students SET grades = {'Baze de date 2': 10, 'Utilizarea sistemelor de operare': 8} WHERE id = 2; UPDATE students SET grades = {'Programare web': 9, 'Calculatoare numerice': 8} WHERE id = 4; UPDATE students SET grades = {'Baze de date 2': 9} WHERE id = 6; UPDATE students SET grades = {'Matematica 1': 8, 'Matematica 2': 9} WHERE id = 7; UPDATE students SET grades = {'Metode numerice': 10, 'Baze de date 2': 7} WHERE id = 8;
Ex. 9. Selectati studentii care au note la materia 'Baze de date 2'.
Cassandra suporta si tipuri definite de utilizator (User defined types - UDT). Acestea pot fi folosite atat de sine statator, cat si in colectii.
Pentru a defini un UDT se poate folosi:
CREATE TYPE [IF NOT EXISTS] [keyspace_name.] <type_name>( <field_name> data_type[,] [<field_name> data_type] [,...] )
Pentru a adauga o coloana de tip UDT se poate folosi:
-- coloana UDT non-colectie ALTER TABLE <table_name> ADD <column_name> udt_data_type; -- coloana UDT colectie ALTER TABLE <table_name> ADD <column_name> collection<frozen<udt_data_type>>;
my_udt_column = {field_1: value_1, field_2: value_2, ...}
Definiti tipul nou Course care are campurile name de tip VARCHAR si year de tip INT:
CREATE TYPE course( name VARCHAR, YEAR INT );
Adaugati in tabela students coloana classes cu tipul LIST<FROZEN<COURSE»:
ALTER TABLE students ADD classes LIST<FROZEN<COURSE>>;
Apoi adaugati cursuri studentilor predefiniti:
UPDATE students SET classes = [{name: 'Baze de date 2', YEAR: 4}, {name: 'Utilizarea sistemelor de operare', YEAR: 1}] WHERE id = 2; UPDATE students SET classes = [{name: 'Programare web', YEAR: 4}, {name: 'Calculatoare numerice', YEAR: 2}] WHERE id = 4; UPDATE students SET classes = [{name: 'Baze de date 2', YEAR: 4}] WHERE id = 6; UPDATE students SET classes = [{name: 'Matematica 1', YEAR: 1}, {name: 'Matematica 2', YEAR: 1}] WHERE id = 7; UPDATE students SET classes = [{name: 'Metode numerice', YEAR: 1}, {name: 'Baze de date 2', YEAR: 4}] WHERE id = 8;
Ex. 10. Adaugati cate 2 cursuri studentilor inserati in tabela students la exercitiul 3.