PROGRAMUL DE STUDIU CALCULATOARE FORMA DE ÎNVĂȚĂMÂNT ZI STUDIU COMPARATIV MYSQL vs CASSANDRA COORDONATOR ȘTIINȚIFIC ABSOLVENTĂ Prof. univ. dr. ing …. [611891]

UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ Ș I TEHNOLOGIA INFORMA Ț IEI
PROGRAMUL DE STUDIU CALCULATOARE
FORMA DE ÎNVĂȚĂMÂNT ZI

STUDIU COMPARATIV
MYSQL vs CASSANDRA

COORDONATOR ȘTIINȚIFIC ABSOLVENTĂ
Prof. univ. dr. ing . Cornelia Gyorodi Vînt Daciana-Maria

ORADEA
2017

UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ Ș I TEHNOLOGIA INFORMA Ț IEI
DEPARTAMENTUL TEHNOLOGIA INFORMA Ț IEI

TEMA
Studiu comparativ MySQL vs. Cassandra
Lucrare de finalizare a studiilor a student: [anonimizat]
1). Tema lucrării de finalizare a studiilor: Studiu comparativ MySQL vs. Cassandra
2). Termenul pentru predarea lucrării:
3). Elemente ini ț iale pentru elaborarea lucrării de finalizare a studiilor:
MySQL, Cassandra, Limbajul de programare PHP
4). Con ț inutul lucrării de fi nalizare a studiilor:
Capitolul 1 – Introducere
Capitolul 2 – ​ Concepte fundamentale ale bazelor de date relationale
Capitolul 3 – ​ Concepte fundamentale ale bazelor de date non-relationale
Capitolul 4 – ​ Limbaje de programare utilizate
Capitolul 5 – Programe utilizate
Capitolul 6 – ​ Testare si comparatie intre Cassandra si MySql
Capitolul 7 – Rezultatele Testarii
​ Capitolul 8 – Concluzii
Bibliografie
5). Material grafic: Imagini prin care se prezintă rezultatele studiului comparativ
6). Locul de documentare pentru elaborarea lucrării: Biblioteca Universită ț ii Oradea Sala
V205
7). Data emiterii temei:

Coordonator ș tiin ț ific
Prof. Ing. Dr. Győrödi Cornelia

Cuprins

Introducere 4
1.1 Obiectivele proiectului 5
2. Concepte fundamentale ale bazelor de date relationale 5
2.1 Informatii generale 5
2.2 Standardul SQL si MySql 9
3. Concepte fundamentale ale bazelor de date non-relationale 14
3.1 Informatii generale 14
3.2 Cassandra BD 15
4. Limbaje de programare utilizate 22
4.1 PHP 22
4.2 Laravel 23
4.3 Limbajul CQL – Cassandra Query Language 25
5. Programe utilizate 26
5.1 Wamp Server 26
5.2 Virtual Box 27
6. Testare si comparatie intre Cassandra si MySql 28
6.1 Prezentarea aplicatiei si a bazelor de date 28
6.2 Implementare si testare 30
6.a Instalare MySql pe Linux 31
6.b Instalare Cassandra pe Linux 33
6.3 Descrierea operatiilor de testare 36
7. Rezultatele testarii 37
7.1 Rezultate INSERT Sql vs Cassandra 38
7.2 Rezultate SELECT Sql vs Cassandra 39
7.3 Rezultate DELETE Sql vs Cassandra 40
8. Concluzii 42
Bibliografie 44

1. Introducere

Această lucrare prezintă un studiu comparativ între baze de date relationale si baze de date
NOSQL (non-relationale).
Am ales sa vorbesc despre acest subiect deoarece mi se pare o evolutie remarcabila si o
schimbare radicala a proceselor de dezvoltare si administrare a datelor, trecerea de la baze de date
traditionale care puteau stoca un volum de date mai mic la baze de date NoSql care pot stoca un
volum mare de date.
Aceasta lucrare are ca scop, analiza caracteristicilor importante ale bazelor de date NoSql si
SQL cu avantaje si dezavantaje comparative, precum si realizarea unor teste comparative.
Studiul principal se rezuma la compararea uneia dintre cele mai utilizate baze de date Nosql
si anume Cassandra cu o baza de date relationala.

Apache Casandra este o baza de date extreme de scalabila si de inalta performanta, care
poate gestiona cantitati mari de date, putand fi instalata atat pe Linux cat si pe Windows.
Acest studiu prezinta pasii de instalare a unei baze de date de tip Cassandra ș i cum se poate
crea un cluster de tip Cassandra prin adăugarea mai multor noduri.
Sunt evidentiate modul in care arată limbajul de interogare ( ​ CQL ​ ) si modul in care se
utilizează linia de comandă.
Bazele de date de tip NoSql existente pe piață in zilele noastre prezinta diferite abordari,
avand ca subiect comun faptul ca nu sunt relationale. Principalul avantaj este acela ca permit lucrul
cu date nestructurate cum ar fi multimedia, email si procesoare de text.

În prezent există multe companii IT care au dezvoltat propriile baze de date NoSQL. Cele
mai populare sunt cele dezvoltate de către companiile mari precum Google si Amazon, deoarece
doresc procesarea unor cantități mari de date.

Cu privire la management, se stie ca orice sistem informatic ofera utilizatorilor informatii
care sunt memorate in fisiere sub forma de date, acestea fiind organizate si intretinute astfel incat
orice utilizator sa obtina informatiile de care are nevoie.

Managementul datelor sistemelor informationale este o parte importanta deoarece
influenteaza in mod direct viteza cu care poti fi obtinute datele .

1.1 Obiectivele proiectului

Lucrarea va realiza o descriere detaliată a conceptului de Baze de Date Relationale si
Non-Relationale respectiv MySql si Cassandra, prin definirea acestora din diferite perspective.

De asemenea, lucrarea va prezenta diferitele modele de procesare ș i arhitecturi, urmate de o
analiză succintă a framework-urilor folosite la ora actuală ș i de una detaliată a framework-ului
utlizat.

Pe baza acestor concepte ș i a relevan ț ei datelor aflate în re ț ele sociale, atât pentru
întreprinderi care se promovează prin intermediul acestora, cât ș i pentru pentru companii ș i
personane individuale, lucrarea va descrie implementarea ș i func ț ionalitatea si testarea comparative
a unor baze de date sql si nosql

2. Concepte fundamentale ale bazelor de date relationale
2.1 Informatii generale

Conceptul baza de date se defineste ca un ansamblu de colectii de date organizate care are ca
scop ​ colectarea ș i organiza rea informa ț iilor. Bazele de date pot stoca informa ț ii despre produse,
persoane, comenzi sau orice altceva.

In figura ​ 2.1.1 de mai jos se prezinta domeniul conceptual si caracteristicile importante ale
unei baze de date.

Fig 2.1.1 Definirea conceptului baza de date

Bazele de date de regula sunt utilizate la gestionarea unor cantități mari de date, ceea ce
presupune existența unor serii de caracteristici importante,si anume:

● definrea structurilor si modelarea datelor
● mecanisme de manipulare a datelor
● siguranta securității datelor într-o baza de date
● siguranta controlului concurenței în cazul utilizării sistemului de către unul sau mai mulți
utilizatori

De regula bazele de date sunt împăr ț ite, în două mari categorii:

● baze de date rela ț ionale
● baze de date non-relationale.

O baza de date relationala ​ este un ansamblu de tabele (relatii)[1] organizate, care utilizeaza
modelul de date relational cu notiunile aferente acestuia.

Modelul Relational

Modelul relațional a fost propus de către compania IBM revoluționand reprezentarea datelor
făcând trecerea la generația a doua de baze de date.
Modelul relațional este definit dupa urmatoarele concepte: restrictiile de integritate,
structura de date si operatorii care acționează asupra structurii.

1. Conceptele folosite pentru definirea structurii de date sunt: tabela (adica relația),
domeniul, atributul, cheia, tuplul, și schema tabelei.

Schema bazei de date este reprezentată printr-o diagramă de structură în care sunt
evidentiate legăturile dintre tabele. Definirea acestor legături se face logic [2] construind asocieri
între tabele cu ajutorul unor atribute de legătură.

Toate atributele care sunt implicate în realizarea legăturilor se găsesc fie în tabele distincte
construite special pentru legături, fie în tabelele asociate.

Atributul din tabela finală se numeste cheie primară, pe cand atributul din tabela inițială se
numește cheie externă. Legăturile posibile intre aceste tabele sunt 1:1, 1:m, si m:n.
Teoretic, orice tabelă se poate lega cu oricare alta tabelă, după orice atribute.

Legăturile fiind stabilite la momentul descrierii datelor prin limbaje de descriere a datelor
(LDD), cu ajutorul restricțiilor de integritate, adica se pot stabili legături dinamice si la momentul
execuției.

2. Operatorii ​ modelului ​ relațional sunt operatorii din calculul relational si operatorii din
algebra relațională.

Algebra relațională este prin definite neprocedurala, ea este vazută ca si o colecție de
operații aplicate asupra tabelelor (relațiilor), fiind concepută de catre E.F.Codd. [3] Operațiile sunt
aplicate în expresiile algebrice relaționale care sunt cereri de regăsire.

Acestea sunt compuse din operatorii operanzi și relaționali. Operanzii sunt totodeauna tabele
(una sau mai multe), astfel rezultatul evaluării unei expresii relaționale este format dintr-o singură
tabelă

In algebra relațională se regaseste si calculul relațional, astfel o expresie din calculul
relațional se poate transforma într-una echivalentă din algebra relațională și invers.

Codd a introdus șase operatori de bază (reuniunea, diferența, produsul cartezian, selecția,
proiecția, joncțiunea) și doi operatori derivați (intersecția și diviziunea).

Exemple:

Pentru a înțelege mai bine aceste operații să presupunem că avem următoarele trei structuri de date:

Fig 2.1.2 ​ Y1-Fisier Studenti Detalii ​ Fig 2.1.3 ​ S2-Fisier Studenti

Fig 2.1.4 ​ S3-Fisier Studenti

Semnificația structurilor de date este:

In ​ Fig 2.1.2 ​ se stochează informații referitoare la studenti cu atributele:

● student_id ​ – id-ul studentului

● materie_id ​ – id-ul materiei la care trebuie sa obtina nota

● ziua ​ – data la care studentul a obtinut nota;

In ​ Fig 2.1.3 ​ si ​ Fig 2.14 ​ se stochează informații referitoare la studenti, cu următoarele atribute:

● student_id ​ – codul studentului (pentru a stabili o legătură între datelor Y1 și S2, S3)

● student_nume ​ – numele studentului

● nota ​ – nota obtinuta.

Principalele operații sunt:

Reuniunea: R3 = S2 ​ ∪ ​ S3

Intersectia: R3 = S2 ∩ S3

Diferența: S2 – S3

Produs cartezian. Fiecare linie din relația Y1 se combină cu fiecare linie din relația S2 astfel ca
rezultat al produsului cartezian, apare un conflict deoarece ambele relații Y1 și S2 [3] au câte un
câmp cu numele student_id, care poate fi rezolvat prin operația de ​ redenumire ​ .

Calculul relațional a fost propus de catre E.F. Codd si se bazează pe calculul predicatelor de
ordinul întâi (domeniu al logicii).

Predicatul prin definitie este o relație care se stabilește între anumite elemente și care poate fi
confirmată sau nu.

Construcția de bază în calculul relațional este expresia relațională de calcul tuplu sau domeniu.

Expresia relațională de calcul este formată din: variabile,operația de efectuat, condiții, formule bine
definite (variabile ,operanzi-constante, funcții, etc)

3) ​ Restricțiile de integritate ale modelului relațional sunt ​ comportamentale ​ și ​ structurale ​ .

Restricțiile structurale sunt clasificate astfel:

● Restricția de unicitate a cheii: ​ se refera la faptul ca intr-o tabelă nu trebuie să existe mai
multe tupluri cu aceeași valoare pentru ansamblul cheie.

● Restricția referențială ​ : de exemplu daca o tabelă tab1 referă o tabelă tab2, valorile cheii
externe trebuie să figureze printre valorile cheii primare din tab2 sau să ia valoarea null.

● Restricția entității ​ : intr-o tabelă, atributele din cheia primară nu trebuie niciodata să ia
valoarea NULL.

Proiectarea bazelor de date relationale

Primii pasi in proiectarea unei baze de date relationale sunt:

● identificarea entitatilor, identificarea relatiilor si a proprietatilor acestora

● realizare unor scheme conceptuale care ilustreaza entitatile si legaturile dintre acestea
normalizarea relatiilor [4]

● eliminarea redundantelor

Fig 2.1.5 ​ Proiectarea unei baze de date relationale

In ​ Fig 2.1.5 ​ este prezentata proiectarea unei baze de date relationale unde sunt evidentiate
legaturile dintre aceasta 1:1, 1:m si m:m.

1:1 (one to one ​ ): – ​ fiecarei linii in primul tabel ii corespunde cel mult o singura linie in al doilea

1:m (one to many ​ ) ​ : ​ – ​ fiecarei linii in primul tabel ii pot corespunde mai multe in al doilea si fiecarei
linii al doilea ii corespunde exact una in primul

m:m (many to many ​ ):- unei linii in primul tabel ii pot corespunde mai multe in al doilea si unei linii
in al doilea tabel ii pot corespunde mai multe in primul

2.2 Standardul SQL si MySql

SQL (Structured Query Language) ​ este la momentul actual, unul din cele mai puternice si
utilizate limbaje structurate pentru interogarea bazelor de date relaționale.

Este un limbaj declarativ și neprocedural, deoarece utilizatorul descrie ce date doreste să
obțină, fără a fi nevoit să stabilească modalitățile de a ajunge la datele respective.

SQL face parte din categoria limbajelor de aplicatii, astfel acesta nu poate fi considerat un
limbaj de programare.[5] Deseori, este utilizat în administrarea bazelor de date client/server,
aplicația client fiind cea care generează instrucțiunile SQL.

Există 3 metode de bază privind implementarea limbajului SQL:

● apelare directa ​ (Direct Invocation): constă în introducerea instrucțiunilor direct de la
prompter.

● modulară ​ (Modul Language): folosește proceduri apelate de programele aplicație.

● încapsulată ​ (Embedded SQL): conține instrucțiuni încapsulate în codul de program.

O instrucțiune SQL este formată din cuvinte cuvinte definite de utilizator si cuvinte
rezervate.

Cuvintele rezervate constituie partea fixă și se scriu exact cum este necesar. Cuvintele
definite de utilizator reprezintă denumirile diverselor obiecte din baza de date.

Deși SQL este un limbaj cu format liber, o instrucțiune este mai usor de interpretat [5] dacă
se utilizează indentarea și alinierea.

De exemplu:

● fiecare clauză dintr-o instrucțiune trebuie să înceapă pe o linie nouă
● începutul fiecărei clauze să fie aliniat cu începutul celorlalte
● dacă o clauză are mai multe părți, fiecare parte trebuie să apară pe câte o linie separată și
trebuie indentată față de începutul clauzei

Convenții de notare folosite în definirea instrucțiunilor:

● majuscule pentru cuvintele rezervate
● litere mici pentru cuvinte definite de utilizator
● bara verticală | indică posibilitatea alegerii dintre mai multe variante
● acoladele { } indică un element necesar
● parantezele drepte [ ] indică un element opțional
punctele de suspensie … indică o repetare opțională a unui articol, de 0 sau mai multe
ori

Identificatorii SQL ​ sunt utilizați pentru a numi obiecte din baza de date. Pentru caracterele
utilizate, standardul ISO permite A…Z, a…z, 0…9, _.

Restricții impuse identificatorilor:

● nu poate fi mai lung de 128 caractere (majoritatea dialectelor au o limită mult mai joasă)
● trebuie să înceapă cu o literă
● nu poate conține spații libere

MySQL ​ este cea mai populară bază de date open source din lume.

Prin performanța dovedită, fiabilitate și ușurință de utilizare, MySQL a devenit cea mai
importantă bază de date pentru aplicațiile bazate pe web, utilizată de companii de renume, cum ar fi
Facebook, Twitter, YouTube și toate cel cinci site-uri web de top. [5]

De asemenea, este o alegere foarte populară ca bază de date integrată, distribuită de mii de
furnizori și producători de software.

Tabelul ​ 2.2.1 ​ prezentat mai jos, ​ ​ rezuma tipurile de date cele mai frecvent utilizate, acceptate
de MySQL si de majoritatea bazelor de date relationale.

MySQL accepta multe alte tipuri de date, dar acestea sunt cele mai folosite.

Tipuri de date din Mysql

Tip de date

Descriere

DATE
Se refera la o data în formatul urmator: an-luna-zi.
Exemplu: 2008-10 ​ -15

CHAR
Un sir de caractere de lungime fixa, cu un maxim de m
caractere, unde m este mai mic decât 256. Pentru obtinerea
lungimii dorite, se insereaza spatii finale.

DECIMAL
DECIMAL(m,d)
Un numar zecimal, reprezentat sub forma de sir cu "m" cifre,
din care "d" se afla la dreapta punctului zecimal. Daca "m" si
"d" sunt omise, în mod prestabilit se vor utiliza valorile 10 si 0

DOUBLE
DOUBLE (m, d)
Un numar cu virgula mobila, cu dubla precizie, având o latime
de afisare egala cu "m" si un numar de "d" cifre dupa virgule

FLOAT(m,d)
Un numar cu virgula mobila, cu simpla precizie, având o latime
de afisare egala cu "m" si un numar de "d" cifre dupa virgule

INTEGER
Unisigned
Un întreg pe 32 de biti. Daca se specifica atributul UNSIGNED,
domeniul de valori este cuprins între 0 si 4294967295; în caz
contrar, domeniul este cuprins între valorile -2147483648 si
2147483647

NUMERIC
NUMERIC (m, d)
Similar cu DECIMAL

TIME
TIMESTAMP
TIMESTAMP(m)

Ora în format ora-minut-secunda; de exemplu, 08-20-00. O
valoare de tip data si ora, în format an-luna-zi
ora-minut-secunda; de exemplu, 1976-01-05 00:00:00. Aceasta
reprezentare este similara celei returnate de functiile UNIX. Pt.
stocare valoarea este transformata din timpul curent in UTC si
transformata invers la solicitarea datei

VARCHAR(m)
Un sir caracter de lungime variabila, cu un maximum de "m"
caractere, unde m este mai mic decât 256 pentru versiuni
MySQL anterioare 5.0.3, iar pt. cele mai noi limita este 65 535
bytes. Spatiile finale au fost eliminate

Tabelul 2.2.1: ​ Tipuri de date din MySql

Operatorii utilizati in mySql

Principalii operatori din MysSql sunt ​ :

||, or xor
&& and
between, case when, then, else
=, >=, >, <=, <>, is, like, in
!, not
+, – (operatori unari)

În MySQL există o valoare specială numită NULL. Semnificația acesteia este de ”valoare
necunoscută”.

Este de retinut ca daca NULL este un operand al oricărei expresii, rezultatul oricărei operații
care se efectuează cu NULL este tot NULL.

Al doilea specificator, NOT NULL, intr-o coloana acesta nu permite valori NULL, iar in
cazul in care omitem valoarea acelei coloane, [6] în ea se va trece automat:

● 0 dacă este de tip numeric;

● șirul vid dacă acea coloană este de tip șir de caractere;

● primul element din șirul de stringuri, dacă este de tip enum;

● mulțimea vidă, dacă acea coloană este de tip set.

​ Exemplu ​ : in tabelul ​ 2.2.2 ​ de mai jos, o sa creez o tabelă, în care sunt două coloane
numerice, una în care se permite valoarea null, alta în care nu se permite, si inserez în această tabelă
o linie în care specific doar numele.

create table persoana(nume text, varsta int not null, greutate int);
insert into persoana(nume) values(‘Pop’);

Tabelul 2.2.2: ​ Exemplu tabela in care se permite valoarea NULL

Cheie primară și cheie unică

Cheia primară ​ este constituită dintr-unul sau mai multe câmpuri și trebuie să îndeplinească
urmatoarele conditii: valorile reținute de coloana care alcătuiește cheia primară trebuie să fie
distincte.

În cazul în care cheia este alcătuită din mai multe câmpuri, pentru a avea două chei distincte este
necesar ca cheile să fie diferite pentru cel puțin o coloană dintre ele.

Tentativa de a adăuga în tabelă o înregistrare care are cheia primară identică cu altă înregistrare se
soldează cu eroare iar adăugarea, evident, nu va mai avea loc;

Câmpul care alcătuiește cheia primară trebuie să aibă o lungime fixă. De exemplu, nu putem avea o
cheie primară de tip text (sau care să conțină un câmp de tip text).

Principalul rol al cheii primare este să asigure accesul foarte rapid la o anumită înregistrare, atunci
când dăm cheia;[6] trebuie mentionat că, înregistrările unei tabele se rețin în ordinea introducerii
lor.

Pentru a preciza faptul că o anumită coloană este cheie primară, atunci când definim tabela, folosim
specificatorul ​ primary key ​ , la fel ca în exemplu de mai jos:

create table student(nr_student char(10) primary key,nume text);

Cheia unică

Cheia unică este constituită dintr-un singur câmp. Se folosește atunci când, într-o anumită coloană,
fie ea participantă la cheia primară, dorim să avem doar valori distincte.

La fel ca și la cheia primară, putem avea cheie unică doar pentru coloanele de lungime fixă. Dacă se
încearcă inserarea unei linii în tabelă, cu o valoare care există deja în cazul unei coloane [6] de tip
cheie unică, se va semnala eroare și inserarea nu va fi permisă.

Specificatorul de cheie unică este ​ unique key ​ . El se folosește ca în exemplul de mai jos:

create table student(nr_student char(10) primary key, nume text,cnp char(13) unique key);

3. Concepte fundamentale ale bazelor de date non-relationale

3.1 Informatii generale

Conceptul de baze de date Nosql este acociat cu o derivare a sistemului de baze de date
relational, fiind o unealta la nivel de shell.

Datele NoSql sunt stocate în fișiere de tip ASCII UNIX astfel încât acestea pot fi manipulate
prin comenzi uzuale UNIX : ls, wc, mv, cp, cat, head. Fiecare fișier conține relații si tabele cu
informații.
O mare parte din sistemele de stocare NoSQL nu garanteaza consistenta, atomicitate izolare
si durabilitate [7] pentru tranzactii,toate acestea numindu-se caracteristici ACID.

Atomicitate: ​ orice tranzactie se executa “totul sau nimic”.

Consistenta ​ : orice tranzactie va transfera baza de date dintr-o stare stabila intr-o alta stare
stabila.

Izolare ​ : rezultatul tuturor tranzactiilor va fi ca si cand s-au desfasurat succesiv.

Durabilitate ​ : o tranzactie odata incheiata va rezulta in pastrarea starii stabile chiar si in cazul
unei caderi a sistemului;

Sistemele NoSQL de cele mai multe ori nu oferă garanții și au o coerența slabă, dar sunt
mult mai usor de distribuit.

Multe dintre serverele de baze de date NoSQL de astăzi se bazează pe Distributed Hash
Table DHT, model, care prevede o semantică hashtable de acces.

Pentru a accesa sau modifica orice dată obiect, clientul este obligat să furnizeze cheia
primară a obiectului, atunci baza de date va căuta obiectul folosind un meci de egalitate la cheie
furnizate.

Termenul NoSQL a fost inventat de catre Eric Evans angajat al companiei Rackspace.

Numele a fost o încercare de a descrie aparitia unui număr tot mai mare de baze de date
non-relaționale, distribuite ce stochează date care de multe ori nu încercă să ofere garanții diferite
de sistemele relationale:[7] MySQL, MSSQL, PostgreSQL concepute pentru gestionarea datelor in
sistem relațional.

NoSQL este un sistem de management a bazelor de date rapid, portabil fără limite arbitrare
altele decât memoria și viteza procesorului ce rulează și interacționeaza cu SO UNIX.

Fig 3.1.1 ​ Nivelul de interes in cautarea bazelor de date NoSql pe Google ​ [8]

Există un număr de operatori fiecare executând o funcție unică asupra datelor.
Fluxul este furnizat de mecanismul de redirectare a intrării și ieșirilor din UNIX.

Există un număr surprinzător de sisteme de NoSQL disponibile astăzi. De exemplu
BigTable este un sistem de stocare distribuit pentru date structurate, [7] este folosit în servicii
Google precum indexing, Google Earth și Google Finance.

In ​ Fig ​ 3.1.1 ​ de mai sus, sunt prezentate statisticile cu privire la nivelul de interes a
populatiei referitoare la sistemele NoSql.

Implementarea conține trei mari componente:

● biblioteca pentru clienți

● un server master și serverele cu tablete, ce pot fi adăugate și eliminate în mod dinamic
(serverele).

Masterul atribuie tablete serverelor de tablete, balansează încărcarea acestor servere,
întreține lista lor, declansează garbage collector-ul.

3.2 Cassandra BD

Fig 3.2.1 ​ Cassandra LOGO ​ [9]

Apache Casandra este o baza de date extrem de scalabila, care poate gestiona cantitati mari
de date, putand fi instalata atat pe Linux cat si pe Windows.

Brand-ul Cassandra este reprezentat vizual prin figura de mai sus ​ Fig 3.2.1

A fost dezvoltata initial de Facebook ca si proiect intern si utilizata ulterior de catre Twitter,
Voldemort, dezvoltata si utilizata anterior de LinkedIn.

Baza de date Cassandra este una din cele mai utilizate baze de date NoSQL oferind cele mai
bune rezultate pentru scalarea performan ț ei [10] ș i posibilitatea de a distribui în mod parti ț ionat
setul de date pe nodurile din ​ cluster ​ în mod gratuit.

Urmatoarea figura 3.2.2 ​ creata de compania DataStax compară 5 din cele mai utilizate
solu ț ii NoSQL din care reiese performan ț a superioară a bazei de date Cassandra în ceea ce prive ș te
cre ș terea volumului de date p rocesate odată cu cre ș terea numărului de noduri din ​ cluster

Fig 3.2.2 ​ Performanta in ceea ce priveste cresterea volumului de date ​ [10]

Cu toate că baza de date Cassandra oferă multe avantaje comparativ cu solu ț iile clasice de
tip rela ț ional, prezintă de ase menea ș i câteva dezavantaje semnificati ve.
Avînd în vedere natura bazei de date Cassandra garan ț ia la nivel de rând are sens din punct
de vedere al design-ului deoarece într-o baza de date NoSQL de acest tip fiecare rând ar trebui să
reprezinte o entitate complexa întreagă .

Fig 3.2.3 ​ Creare si inserare date intr-o tabela

Limbajul de interogare, CQL (Cassandra Query Language) e aproape identic cu SQL,
singurul aspect ncunoscut fiind conceptual de keyspace care se poate observa in ​ figura 3.2.3 ​ care
con ț ine informa ț ii despre cum trebuie replicate datele în ​ cluster ​ -ul de Cassandra.

Pentru a putea scala performan ț a unei aplica ț ii, Cassandra permite configurarea
de ​ clustere ​ de noduri Cassandra.
Prin utilizarea ​ cluster-elor ​ o aplica ț ie poate beneficia de un grad ridicat de disponibilitate, o
scalare liniară a performan ț ei ș i de o interfa ț ă simplă de acces către o multitudine de servere de cost
redus fără un punct unic de e ș ec.
În cadrul unui context de ​ cluster ​ se pot defini cantitatea de date pe care un anumit nod poate
să o proceseze ș i pe care nod din ​ cluster ​ să ajungă o anumită înregistrare.
Gradul de disponibilitate al ​ cluster ​ -ului se poate regla prin intermediul ​ strategiei de
replicare ​ care indică numărul de copii al fiecărui rând dintr-un tabel ce trebuie să existe
în ​ cluster ​ la un moment dat.

Fig 3.2.4 ​ : Creare cluster

După ce fi ș ierul de config urare este finalizat, se instaleaza pachetul Cassandra ș i se copiaza
fi ș ierul ​ cassandra.yaml ​ pe to ate nodurile din ​ cluster ​ .

Valoarea ​ cluster_name ​ trebuie să fie identică pe toate ma ș inile (exemplu in ​ fig 3.2.4 ​ ).

Nodurile ​ seed ​ sunt utilizate de către fiecare nod din ​ cluster ​ pentru a descoperi
topologia ​ cluster- ​ ului.

Se seteaza câmpul ​ listen_address ​ la adresa IP a fiecărei ma ș ină, aceasta va fi folosită pentru a
comunica cu celelalte noduri.

Modelul de date poate fi descris ca niște hash-map-uri imbricate.[10] Hash-map-urile stochează
datele printr-o cheie unică folosită pentru a regăsi datele.

De exemplu pentru a mapa cu chei de tip string tablouri de bytes am scrie în java:

Map<String, byte[]> map=new HashMap<String, byte[]>();

Acelasi principiu se pastrează și în Cassandra doar că aici nu avem un singur hashMap ci până la
trei nivele imbricate de hash-uri.

In ceea ce priveste codul Cassandra ofera o gama larga de posibilitati, ceea ce depinde in mare parte
de limbajul de programare utilizat.

În Cassandra perechile cheie-valoare nu sunt stocate ca două valori individuale ci cuplate într-o
clasa numită column. Cassandra își structurează modelul de date în spații de chei, familii de
coloane, coloane și supercoloane

Tabelele pot fi create, sterse sau modificte la runtime fara a bloca update-uri sau interogari.

Pentru a asigura durabilitatea datelor Cassandra foloseste un commit log pentru fiecare nod in care
se scrie secvential fiecare activitate.

Dupa scrierea in commit log data este indexata si scrisa intr-un Memtable, acesta comportandu-se
ca o memorie cache.

In momentul in care Memtabel-ul este plin datele sunt scrise pe disc intr-o structura numita
SSTable, toate scrierile fiind in mod automat partitionate si replicate in intreg cluster-ul.

Pentru a efectua operatia de „merge” asupra acestor SSTable-uri, Cassandra foloseste un proces
numit compactare care consolideaza periodic SSTabel-urile, asigurandu-se astfel ca datele
irelevante sunt sterse.

Cassandra este o baza de date roworiented, iar fiecare cerere de citire sau scriere putand fi procesata
de orice nod din cluster.

In momentul in care un client se conecteaza la un nod din cluster pentru a-i procesa cererea acest
nod va lua functia de coordonator.[10] Acest coordonator se comporta ca un proxy intre aplicatie si
nodurile care detin datele cerute.

Coordonatorul stabileste care noduri din inel/cluster contin acele date si ar trebui sa se ocupe de
cererea clientului .

In ​ fig 3.2.4 este prezentata arhitectura cassandra cu tot ce tine de caracteristicile de baza de care am
vorbit mai sus.

Fig 3.2.4: ​ Ahitectura Cassandra [11]

Solutii si limitari Cassandra

Cassandra prezinta cateva dezavantaje semnificative, cu toate ca aceasta baza de date ofera
multe avantaje in comparatie cu bazele de date de tip relational.

● Fără tranzac ț ii

● Fără JOIN-uri

● Fără interogări complexe

Fara tranzactii

La nivel de tranzactie Cassandra nu ofera garantia atomiciatii si a izolarii, dar asigura aceste
proprietati la nivelul unui rand din tabela.

Intr-o baza de date precum este Cassandra garantia la nivel de rand are sens din punct de
vedere al designu-lui, [11] deoarece fiecare rand ar trebuii sa reprezinte o entitate intreaga.

Cu privire la consistenta datelor la nivel de cluster, Cassandra ofera diferite nivele de
consistenta atat pentru scriere cat si pentru citire.

Cassandra a adaugat conceptual de tranzatie numit ​ lightweight pentru a ajuta programatorii
in consistenta datelor.

Functionalitatea acestuia permite operatii de tip set and compare cum ar fi: actualizarea unei
inregistrari care exista daca o o conditie este indeplinita, sau crearea unei inregistrari noi.

Cunoscutul autor si programator Martin Fowler spune ca lipsa tranzactiilor nu trebuie privita
ca si un mare dezavantaj, [11]deoarece utilizarea tranzatiilor pe periode mari de timp poate afecta
serios performanta.

Fara JOIN-uri

In acest caz crearea unei aplicatii folosind baza de date Cassandra va necesita gandire
NoSql. Acest lucru inseamna remodelarea structurii bazei de date in jurul ideii de modele aggregate,
chiar daca presupune o restrictive majora a ​ data acces layer ​ -ului.

Fara interogari complexe

Cassandra nu permite:

● setarea unei condi ț ii pe o coloană care nu face parte din cheia primară sau nu e indexată

select * from users where name = 'John';
​ n ​ u putem executa codul fără a crea explicit un index pe coloana name

● setarea unei condi ț ii folosind unul din operatorii ​ IN, =, >, >=, <, or <= ​ fără a adauga o
condi ț ie de egalitate pe cel pu ț in una din coloanele ce fac par te din cheie.

create index users_name_index on users(name);
se poate executa ​ interogarea select * from users where name ='John'; ​
însă nu putem executa interogarea similară ​ select * from users where name in
('John') ​ ; deoarece interogarea nu contine o condi ț ie de egalitate.

Clasamentul bazelor de date NoSql prezentat in ​ fig 3.2.5 in functie de popularitatea lor contine si
baza de date Cassandra, care se afla printe primele 10 cu un scor de 123.88, acest clasament fiind
actualizat lunar de catre DB-Engines Ranking.

Fig 3.2.5: ​ Clasamentul lunar al celor mai populare baze de date NoSql [12]

Baza de date Cassandra a fost definita ca un hybrid intre modelul ​ BigTable si infrastructura
de la Amazon, Dynamo.

BigTable este folosit în servicii Google precum indexing, Google Earth și Google Finance si
este un sistem de stocare distribuit pentru date structurate.

O structură de date BigTable este un Map sortat, distribuit, persistent și multidimensional,
indexat după o cheie de rând, una de coloană și o stampilă de timp.

Valoarea rezultată este un tablou de bytes, neinterpretat. Datele sunt menținute în ordine
lexicografică după cheia de rând. Fiecare operație (citire/scriere) asupra datelor dintr-un rând se
desfășoară în mod atomic.

Cassandra ofera support pentru multiple datacentere, astfel din punct de vedere al modelului
datelor se remarca si Cassandra cu modelul ​ columnfamily ​ .

Modelul ColumnFamily permite ca randurile sa aiba numar diferit de coloane, pe cand
modelul cheie-valoare, este ineficient la actualizarea datelor associate unei valori a cheii, cu toate
ca este mai simplu de implementat.

In Cassandra se pot adauga coloane in mod liber si nu trebuie specificata cate o valoare
pentru fiecare coloana existenta in momentul inserarii datelor.

In figura de mai jos ​ 3.2.6 ​ este prezentata structura unei familii de coloane.

Fig 3.2.6 ​ Structura unei familii de coloane [13]

Column : este o structura de date cu 3 valori(numele cheii, valoarea scrisa la acea coloana si un
indicator de timp). In figura, ​ 3.2.7 ​ este prezentata structura unei coloane.

Fig 3.2.7: ​ Structura unei coloane

Facebook, Instragam si Cassandra

Primul deployment de Cassandra a fost facut pentru Facebook, mai exact a fost folosit la
sistemul de search din inbox-urile utilizatorilor.

Acest deployment a obtinut rezultate foarte bune cu indecsi de peste 120 TB, intr-un cluster
cu peste 600 de procesoare.

Rick Branson, software inginer la ​ instagram spune ca implementarea softului Cassandra a
redus costurile cu 15% fata de costurile care le aveau inainte.

Fiind o baza de date scalabila, programatorii au trimis date la cluster mai usor, putanad
adauga noduri ori de cate ori este nevoie.

Initial scopul programatorilor a fost mentinerea securitatii aplicatiei si a informatiilor
stocate, gasirea de utilizatori abuzivi si combaterea spamului.

Toate aceste trasaturi fiind realizate in Redis. Odata ce dimensiunea datelor a crescut tot mai
mult si tot mai repede, aceasta trasatura a fost total neproductiva, astfel s-a recurs la Cassandra.

Acesta a fiind baza pentru principalele aplicatii de back-end, pornindu-se de la un cluster cu
3 noduri si ajungandu-se la un cluster cu 12 noduri.

Instagram este o aplicatie pentru telefoane mobile, unde se pot adauga o varietate de
fotografii cu diferite filtre, care pot fi distribuite pe diferite retele de socializare.

4. Limbaje de programare utilizate

4.1 PHP

Limbajul PHP este un limbaj de programare structurat, de uz general cu codul-sursă deschis
(Open Source), utilizat în general pentru dezvoltarea aplica ț iilor Web. PHP înseamnă Hypertext
Preprocessor, sintaxa sa provine din C, Java si Perl, acesta are rolul de a permite realizarea unor
pagini web generate dinamic.
Principalele caracteristici ale limbajului sunt:
● Simplitate: nu se folosește includerea de biblioteci, codul PHP fiind inclus într-un
document executându-se între marcaje speciale.
● Cross-Platform: cele mai populare implementări ale limbajului sunt cele de pe sistemele
Linux și Windows.
● Securitate: limbajul PHP de ț ine un set de măsuri de siguran ț ă puse la dispozi ț ia
programatorului.
● Flexibilitate: odată cu dezvoltarea noilor tehnologii PHP-ul a fost integrat pentru
serverele web deja existente: Zeus, Apache, IIS, etc.
● Gratuitate: open source.
● Usurință în utilizare.

Pentru a rula pagini HTML (scripturi), trebuie să programăm calculatorul în calitate de server
web și bază de date MySQL. Aceste componente de bază esen ț iale sunt gratuite și pot fi descărcate
cu usurin ț ă de pe site-ul oficial al producătorului, următorul pas fiind instalarea și configurarea
acestora.

In general este des întalnită instalarea unui pachet complet ce conține Apache + PHP + MySQL
+ PHPMyAdmin care se numește WampServer, XAMPP, PHPTriad, EasyPhp, Base etc. Aplicația

PHPMyAdmin inclusă în pachetul WAMP permite administrarea cu usurință a bazei de date
MySQL.

In aplica ț ia prezentată este folosit limbajul PHP pentru creearea tuturor func ț iilor începând de la
autentificare, logare, delogare, contact, adăugare de produse în coș, finalizare comandă, etc.

In principiu limbajul PHP din punct de vedere funcțional, este baza aplica ț iei. Am folosit acest
limbaj în cadrul website-ului prezentat deoarece am avut ocazia să mă familiarizez cu el în decursul
experienței mele, acesta fiind cel mai popular în rândul realizării website-urilor.

4.2 Laravel

Laravel este un framwork open-source dezvoltat în limbajul PHP. În ultima vreme, acest
framework a câ ș tigat mult teren în sensul că a devenit din ce în ce mai utilizat,ajungând în unele
topuri chiar pe primul loc. Acest lucru se datorează în mare parte din următoarele motive:

● sintaxă expresivă ș i u ș oară de re ț inut
● facades – clase ale căror metode pot fi apelate ca ș i metode statice
● manual de utilizare complet ș i extrem de bine documentat
● permite focusarea programatorului asupra bunei func ț ionări a aplica ț iei
● dezvoltare rapidă ș i corectă a structurii de cod
● promovează DRY (Don’t Repeat Yourself) – un principiu pentru a folosi func ț ii deja
existente ș i corec te, pentru evitarea eroărilor
● oferă un mediu tehnic prielnic împărtă ș irii facile a liniilor de cod între modulele unui
program

Ajuns versiunea 5.5, Laravel dispune ș i de mod linie de comandă prin componenta sa numită
Artisan, introdusă încă din versiunea 3.

Ulterior, a evoluat spre o arhitectură bazată pe Composer, fapt ce a permis să includă diverse
componente din framework-ul Symfony, aflat la acea vreme în fruntea clasamentului pentru
acest gen de framework-uri.

Artisan este capabil să creeze, sau să introducă sau să modifice baza de date, să creeze proiecte
Laravel noi, să publice pachete active, să genereze cod de ș abloane pentru proiecte noi, etc.

Laravel este structurat în:

● Controller – în această sec ț iune se găsesc func ț iile de control Laravel ș i PHP
● View – Aici sunt paginile HTML(CSS ș i Javasript)
● Model – Tabelele bazei de date sunt transformate în modele pentru control ș i
● flexibilitate. Această sec ț iune interac ț ionează cu baza de date
● Routes – În această sec ț iune sunt legăturile dintre pagini (views) ș i func ț iile
● aferente(func ț ii din Controller)

Entită ț ile din baza de dat e pot fi transformate în modele. Astfel că un tabel Persoane
din baza de date poate fi manipulat mai simplu.

Dacă considerăm comanda
$persoane = DB::table(persoane)-&gt;get();
Această comandă scrisă în PHP poate fi scrisă în Laravel astfel:
$persoane = Persoane::all();

4.3 Limbajul CQL – Cassandra Query Language

Limbajul de interogare, CQL (Cassandra Query Language) e aproape identic cu SQL,
singrul aspect ncunoscut fiind conceptual de keyspace care con ț ine informa ț ii despre cum trebuie
replicate datele în ​ cluster ​ -ul de Cassandra.

Comenzile din limbajul cql pot fi rulate folosind linia de comanda, aceste se numesc
comenzi ​ cqlsh ​   ​ si se pot rula in mai multe noduri.

Sintaxa limbajului CQL nu este greu de citit si de inteles chiar si pentru incepatori. La fel ca
si SQL, acesta poate creea, modifica si proiecta o baza de date cu volume mari de date.

SELECT ​ * ​ FROM ​ studenti;
UPDATE ​ sudenti
​ SET ​ materie = 'BazeDeDate'
​ WHERE ​ facultate = IETI;

Majoritatea tipurilor de date folosite in CQL sunt la fel ca si in limbajul SQL, dar Cassandra vine cu
cateva in plus si anume:

Frozen ​ : – daca datele sunt “inghetate”, acestea pot fi seriaizate intr-o singura valoare. In cazul in
care datele nu sunt”inghetate”, aceste tipuri permit actualizarea campurilor individuale.

frozen <tuple <int, tuple<text, double>>>

List ​ : – este o colec ț ie de unul sau mai multe elemente ordonate: [literal, literal, literal]. Listele au
limite ș i considera ț ii specifice de performan ț ă.Se poate utiliza o listă înghe ț ată pentru a reduce
impactul.
Map: – ​ foloseste un array de tipul JSON { literal : literal, literal : literal … }
Bigint: ​ – este de tipul int 64 de biti.

Tipurile de date CQL au cerin ț e stricte pentru compatibilitatea conversiilor.
In Cassandra tipurile de date ​ ascii, bigint, boolean, decimal, double, float, inet, int, timestamp,
timeuuid, uuid, varchar, varint pot fi medicate la ​ BLOB.

● INT ​ poate fi modificat la ​ VARINT

● TEXT ​ poate fi modificat ​ ​ la ​ VARCHAR

● TIMEUUID ​ poate fi mdificat la ​ UUID

5. Programe utilizate

5.1 Wamp Server

WampServer este un software pentru sistemul de operare Microsoft Windows, creat de
Romain Bourdon, acesta constă în serverul web Apache, MySQL și limbajul de programare PHP.
Cele mai noi versiuni disponibile în momentul actual sunt: WampServer (32 bi ț i și PHP 5.5)
2.5 și WampServer (64 bi ț i și PHP 5.5) 2.5.

Pentru a putea folosi acest software trebuie sa tinem cont de urmatoarele caracteristici:

1 ​ . Software-ul trebuie instalat pe sistemul PC mai exact pe partiția C a hard disk-ului, în
folderul wamp, adică la adresa c:/wamp; în timpul instalării softului, nu trebuie modificata calea
unde se instaleaza softul.

2 ​ . Softul trebuie sa fie activ (acesta se porneste cu Run ca si cum se porneste orice aplicatie).

3 ​ . Serverul web Apache va porni automat, dacă nu sunt probleme pe parcursul activării
softului ( de obicei în taskbar, în partea dreaptă, apare o icoană, care își va schimba culoarea în
portocaliu, iar apoi în verde, dacă totul decurge bine).

4. In browser, se acceseaza adresa ​ http://localhost ​ pentru a testa dacă serverul apache
rulează correct.

5 ​ . ​ Codul php trebuie dezvoltat în folderul ​ c:/wamp/www ​ , codul trebuie să se afle într-un
folder public, vizibil serverului web Apache, pentru a putea fi executat.

Am folosit software-ul Wamp pentru a crea o baza de date relationala.

5.2 Virtual Box

VirtualBox este o aplicatie puternica de virtualizare, compatibilă cu PC-uri echipate cu
sistem de operare Windows, în versiune pe 32 sau 64 biți.
Este disponibila pentru utilizare în mod ​ gratuit ​ , aceasta ofera posibilitatea de a emula un PC
virtual, în care putem instala oricare din versiunile sistemului de operare Windows, Linux sau
Macintosh.

Spațiul pentru instalare poate fi o partiție virtuală, de forma unui singur fișier stocat oriunde
pe hard disk, sau un mediu de stocare dedicat, ales pentru maximizarea performanțelor.
Instalarea efectivă a sistemului de operare poate fi făcută folosind un disc de instalare
original, sau montând imaginea ISO boot-abilă, conținând kit-ul de instalare.
Odată instalat într-o mașină virtuală, sistemul de operare ales pentru testare poate fi rulat în
fereastră sau mod maximizat, la fel ca orice altă aplicație.
In acest proiect am folosi aplicatia virtualbox fig 5.2.1 pentru a emula un pc virtual unde am
instalat sistemul de operare Linux, necesar testarii bazei de date Cassandra .

Fig 5.2.1 ​ Instalare masina virtuala

6. Testare si comparatie intre Cassandra si MySql

6.1 Prezentarea aplicatiei si a bazelor de date

În prezent, se poate observa că tot mai mul ț i utilizatori ai internetului prezintă o mare
atrac ț ie fa ț ă de re ț elele de socializare ț i tocmai din acest motiv, aplicatia reprezintă proiectarea ș i
implementarea unui site de socializare.

Site-urile de socializare, mai nou au devenit un trend ș i de la copii până la bunici, ș i-au
fiecare avand cont pe site-urile de socializare, fie din necesitatea de comunicare în familie, fie din
lipsă de ocupa ț ie sau doar pe ntru că este la modă să „fii online”.

Prezentarea schematica a bazei de date se poate observa in figura 6.1.1 ​ de mai jos.
Utilizatorii vor fi inregistrati în tabelul ​ users ​ , cu informa ț iile aferente.

Users este tabelul principal al bazei de date cu cele mai multe ramifica ț ii (7) ș i în care sunt
cele mai multe coloane (15).

Aici sunt introduse, datele personale ale utilizatorului, email-ul, parola criptată, dacă este
sau nu administrator, dacă si-a confirmat contul după înscriere ș i desigur poza de profil.

Fig 6.1.1 Structura bazei de date

Datorita faptului ca baza de date ​ Cassandra ​ nu poate avea o reprezentare grafică, s-a
prezentat în continuare o reprezentare tabelară din MySQL.

Cele două baze de date au acela ș i număr de coloane ș i acela ș i tip de date pentru fiecare
câmp în parte.

6.2 Implementare si testare

MySQL

Implementarea acestei aplica ț ii constă în parcurgerea treptată a pa ș ilor din faza de
proiectare precum ș i îmbinar ea cu tehnologiile necesare pentru o func ț ionalitate optimă ș i
eficientă a aplica ț iei.

Primul pas este instalarea platformei de bază a aplica ț iei, adică a framework-ului
Laravel.

După descărcarea arhivei ce con ț ine baza framework-ului, este necesar instalarea
softului Composer, compomentă a framework-ului.

Ulterior, este necesară configurarea framework-ului pentru a se putea conecta la baza
de date creată.

Acest lucru se face prin editarea unui fi ș ier din cadrul arhivei Laravel unde se
va introduce adresa serverului pentru baza de date, numele bazei de date, precum ș i
numele de utilizator al bazei de date ș i parola aferentă.

Următorul pas, este acela de a creea modele în Laravel, după entită ț ile bazei de date.
Acest lucru se face în folder-ul Models din arhiva Laravel, unde se va crea un fi ș ier nou cu
numele ”nume_tabel”.php.

De exemplu dacă avem tabelul ​ Users în baza de date, numele modelului va fi ​ Users.php, iar
în interiorul acestui fi ș ier, odată salvat se poate introduce codul aferent pentru a deveni un model
valid.

Am folosit framework-ul Laravel ​ deoarece acesta dispune de o functie Factory ( ​ Fig 6.2.1 ​ )
care poate genera un numar mare de inserari in baza de date, automat fara ca programatorul sa faca
acest lucru manual, usurandu-i munca.

Fig 6.2.1 ​ Functia Factory din Laravel

Functia Factory din Laravel este conectata la Faker care este o librarie PHP ( ​ Fig 6.2.2) ​ .
Aceasta librarie poate sa populeze cu date o tabela sau mai multe din baza de date.

Fig 6.2.2 ​ Apelare functia factory

User::class – ​ este primul parametru si reprezinta modelul, astfel laravel stie sa asocieze
modelul ​ User ​ la tabela ​ users ​ din baza de date.

30000 – ​ este al doilea parametru, adica ii precizam numarul de interogari care dorim sa se
adauge in tabela users din baza de date.

Pentru a putea realiza o testare intre cele doua baze de date am instalat atat Cassandra cat si
MySql pe sistemul de operare Linux.

6.a Instalare MySql pe Linux

Dupa ce am instalat masina virtuala Virtual Box ​ fig 6.2.3 ​ despre care am vorbit mai sus, pe
aceasta am instalat sistemul de operare Liux.

Linux este o familie de sisteme de operare de tip ​ Unix ​ care folosesc ​ Nucleul Linux ​ (în
engleză kernel).

Linux poate fi instalat pe o varietate largă de ​ hardware ​ , începând cu telefoane mobile,
tablete, console video, continuând cu calculatoare personale până la supercomputere

Fig 6.2.3 ​ ​ Masina virtuala folosita in aplicatie

Configurare MySql

cd /home/daciana/mysql-5.1.34
./configure –prefix=/home/daciana/mysql –with-charset=utf8 –with-collation=utf8_general_ci
make install

Pentru a finaliza instalarea am creat un fisier de configurare.
Acesta nu trebuie scris de la zero deoarece exista 4 fisiere predefinite, astfel am optat pentru o
configuratie medie.

● cp support-files/my-medium.cnf /etc/my.cnf
● chown root /etc/my.cnf
● chgrp root /etc/my.cnf
● chmod 644 /etc/my.cnf

Pentru a functiona corect MYSQL are nevoi de o baza de date pe care am numit-o “mysql”.
Pentru crearea ei am executat
/usr/local/mysql/bin/mysql_install_db –user=mysql
Dupa ce am testat si am verificat ca Mysql s-a instalat corect, am creat baza de date cu
tabelele aferente, ajutandu-ma de baza de date creata anterior cu Laravel, astfel am importat un
fisier txt.csv cu toate inregistrarile.

Am executat aceasta comanda

LOAD ​ ​ DATA ​ ​ INFILE ​ ​ txt.txt' ​ ​ INTO ​ ​ TABLE ​ users ​ ;

Am obtinut o baza de date sql populata cu date pregatita pentru a fi testata pe diferite operatii,
rezultatele testarii fiind prezentate in capitolul urmator.

6.b Instalare Cassandra pe Linux

Folosind baza de date Cassandra Pentru implementarea aplicatiei prezentate mai sus am
parcurs o serie de pasi :

Pentru a realiza o serie de tabele, inserari, selectu-uri sau query-uri folosind baza de date
Casandra, in masina virtuala am instalat Apache 2.1 ​ fig 6.2.4

Apache ​ este un ​ server ​ ​ HTTP ​ de tip ​ open source jucand un rol important în
dezvoltarea ​ web-ului ​ , fiind folosit în prezent în circa 65.2 % din paginile web.

Apache este folosit de unele din cele mai mari site-uri din lume iar, motorul de căutare
folosit de Google folose ș te o versiune modificată de Apache numită Google Web Server (GWS);

Fig 6.2.4 Install Apache

Install Docker

Docker este package container care realizeaza un sistem cât mai izolat ș i standardizat al
unei aplica ț ii ș i a tuturor dependin ț elor acesteia pentru un mod de lucru mai independent.
Docker aduce în plus fa ț ă de ma ș ini virtuale, faptul că este bazat pe un sistem
de ​ containere ​ .
Docker si Cassandra se folosesc pentru a sincroniza o baza de date care functioneaza in
mod cloud. ​ In ​ fig 6.2.5 ​ am instalat docker.

In concluzie dockerul iti usureaza gestionarea aplicatiilor de pe server reducand mult
resursele necesare.

Fig 6.2.5 Install Docker

Install ​ cqlsh

Cel mai simplu si mai eficient mod de a interac ț iona cu Apache Cassandra este utilizarea
scriptului ​ cqlsh ​ .

Folosind scriptul ​ cqlsh ​ se pot crea chei ș i tabele, insera ț ii ș i interoga ț ii in tabelele din baza
de date.

Cqlsh poate face o conexiune intre shell si un nod specificat Cassandra pe baza adresei IP pe
care o gaseste in cazul nostru aceasta este specificata in figura de mai sus.

Creare KEYSPACE

Un keyspace în Cassandra define ș te replicarea datelor pe noduri. Un cluster con ț ine un
keyspace pentru fiecare nod, fiind utilizata comanda ​ CREATE KEYSPACE

Sintaxa pentru crearea unui keyspace este:

CREATE KEYSPACE <identifier> WITH <properties>

Instruc ț iunea CREAT E KEYSPACE are două proprietă ț i: replicare ș i durable_writes ​ .

După ce linia de comandă este pornită totul pare destul de familiar. Limbajul de interogare,
CQL (Cassandra Query Language) e aproape identic cu SQL.

Am creat aceeasi tabela atat in baza de date Cassandra cat si in baza de date Sql, dupa care
am inserat valori exemplu in ​ fig 6.2.6

​ Fig 6.2.6 ​ ​ Creare tabela users si popularea acesteia cu valori

Dupa ce am instalat si configurat Cassandra am parcurs acceasi pasi ca si in cazul Sql.
Am creat baza de date cu tabelele aferente am importat acelasi fisier txt.csv cu acelasi numar de
inregistrari, cu alte cuvinte am pregatit baza de date pentru testare.

Pentru a testa diferen ț ele de viteză dintre cele două baze de date, s-au realizat o serie de teste
pentru fiecare caz de insert, select, si delete în parte.

Numărul de utilizatori a variat, acesta fiind la început 10. 000 si continuand cu un numar
mai mare pana la 30.000 de uttilizatori.

Timpul de raspuns in ​ SQL ​ se masoara in secunde spre deosebire de ​ Cassandra ​ unde in
cazul selectului si deletului se masoara in microsecunde.

6.3 Descrierea operatiilor de testare

In lucrare au fost realizate diferite opera ț ii asupra celor două baze de date. Acestea sunt
operatii de baza care se pot realiza asupra oricărei baze de date, ș i anume:

● CREATE (insert)
● SELECT
● DELETE

Pentru a creea bazele de date am introdus urmatoarele comenzi in linia de comanda:

Crearea bazei de date in Cassandra

CREATE KEYSPACE users WITH replication = {'class': 'SimpleStrategy',
'replication_factor': 1};

Crearea bazei de date in SQL
CREATE DATABASE users;

Operatia de CREATE a celor doua baze de date este asemanatoare dar totusi diferita. Sql
foloseste comanda simpla “create database table” cu care suntem obisnuiti pe cand Cassandra vine
in plus cu keyspace-ul “create keyspace test” de care am vorbit mai sus, dar si cu o harta a
proprietatilor si a valorilor care defineste cele doua timpuri de keyspace.

{ 'class' : 'SimpleStrategy', 'replication_factor' : <integer> };

SimpleStrategy ​ este un parametru obligatoriu (required) si se refera la numele clasei pentru noul
spatiu al keyspaceu-lui.

Replication Factor: ​ este folosit daca exista clasa ​ SimpleStrategy ​ altfel nu este utilizat ​ .

Operatia de SELECT este indentica ca si sintaxa in cazul ambelor baze de date. Un aspect pe care
l-am observat in timpul testarii acestor operatii si care le diferentiaza este unitatea de masura a
timpului de raspuns.

In cazul Sql timpul de raspuns l-am primit in secunde pe cand in cazul Cassandrei timpul de raspuns
se masoara in microsecunde

Exemplu: SELECT * FROM USERS

In cazul operatiei de DELETE in Sql am folosit comanda simpla DELETE FROM USERS pe
cand in cazul bazei de date Cassandra am folosit comanda:

TRUNCATE keyspace_name.table_name – ​ in exemplul din lucrare ar veni TRUNCATE
test.users

In cassandra atunci cand o coloana este stearsa, aceasta nu se sterge imediat de pe disk, ea este
marcata, iar dupa expirarea perioadei de gratie este stearsa definitiv.

7. Rezultatele testarii

7.1 Rezultate INSERT Sql vs Cassandra

Fig 7.1.1 ​ Rezultate de comparative pe operatia INSERT

Fig 7.1.2 ​ Exemple din linia de comanda Sql vs Cassandra 10.000 de inserari

După cum se observă în figura de mai sus 7.1.1 ​ si in figura ​ 7.1.2 in cazul operatiei de
INSERT ​ (creare) SQL a fost mai rapid.

În cazul testului de mai sus, diferen ț ele dintre cele două baze de date sunt relativ mari,
deoarece s-a depă ș it timpul d e o secundă.

In urma testarii acestor baze de date am ajuns la concluzia ca desi se spune ca “Casssandra
este mai rapida decat MySql”, in cazul operatiilor de rangul 10,000 pana la 30.000 de useri acesta
afirmatie nu este adevarata, facand acest test de doua ori deoarece a fost surprinzator si pentru mine.

Diferenta mare a timpului de raspuns a bazei de date Cassandra se explica prin faptul ca
aceasta ​ este optimizată pentru sute de cititori ș i scriitori simultani pe mai multe noduri, spre
deosebire de MySQL ( ș i alte DB rela ț ionale) care sunt optimizate pentru a fi foarte rapide într-un
singur nod

7.2 Rezultate SELECT Sql vs Cassandra
.

Fig 7.2.1 ​ Rezultate de comparative pe operatia SELECT

In cazul operatiei de SELECT ​ fig 7.2.1 ​ diferenta dintre cele doua baze de date a timpului de raspuns
nu este asa de mare ca si in cazul operatiei de INSERT, dar Sql si de aceasta data scoate un timp
mai mic fata de Cassandra.

Inca o diferenta pe care am intalnit-o la operatia de select este ca timpul de raspuns in cassandra
l-am primit in microsecunde spre deosebire de operatia de INSERT unde l-am primit in secunde
exemplu in ​ fig 7.2.2

Ulterior am convertiti microsecundele in secunde pentru a pastra aceasi unitate de masura

Fig 7.2.2 ​ Exemple din linia de comanda Sql vs Cassandra 20.000 de inserari

7.3 Rezultate DELETE Sql vs Cassandra

In concluzie cele mai mari diferen ț e dintre cele două baze de date au apărut doar in cazul operatiei
de INSERT, operatia de DELETE nu trece de 1 secunda in ambele cazuri, exemplu in ​ fig 7.3.1 ​ si
7.3.2

Astfel, în cazul modificărilor simultane a 10.000, 20.000 si respectiv 30.000 de utilizatori, Sql a fost
mai rapida decât Cassandra.

Acest aspect este foarte important pentru aplica ț ii care utilizează baze de date ce realizează constant
opera ț ii de actualizare a date lor.

In cassandra atunci cand o coloana este stearsa, aceasta nu se sterge imediat de pe disk, ea este
marcata, iar dupa expirarea perioadei de gratie este stearsa definitiv.

Fig 7.3.1 ​ Rezultate de comparative pe operatia DELETE

In cazul in care folosim baza de date Cassandra, o astfel de aplica ț ie ar putea functiona
perfect pe un server cu o configuratie avansata si cu un volum de date de ordinul milioanelor.

Un al doilea aspect important ar fi ca aplicatia prezentata in lucrare a fost rulata pe un sistem
cu o configuratie minora in comparatie cu serverele de la Facebook, Instagram si alte companii de
genul, care lucreaza cu un volum de date mare.

Pentru ca aceasta aplicatie sa fie un succes eu consider ca trebuie atent analizate ș i urmărite
următoarele aspecte cu privire la o baza de date: definirea ș i analiza cerin ț elor func ț ionale ș i
non-functionale precum consistenta, performanta, disponibilitatea, scalabilitatea si alegerea
modelului de date optim pentru query-urile utilizate cel mai frecvent.

Fig 7.3.2 ​ Exemple din linia de comanda Sql vs Cassandra 10.000 de inserari

8. Concluzii

Scopul principal al acestei lucrari a fost o comparatie si o testare a timpului de raspuns
dintre o baza de date relationala si o baza de date NoSql.

Din punctul meu de vedere sistemele NoSQL sunt într-o fază de evolu ț ie naturală, si sub nici
o formă nu înlocuiesc sistemele rela ț ionale, ci le complementează.

Exsită mai multe solu ț ii NoSQL, apar ț inând unor clase diferi te, fiecare adecvată unei
anumite probleme. Deși oferă un avantaj, nu există soluție NoSQL perfectă pentru toate
scopurile.

Înainte de face o alegere în acest sens trebuie atent analizate ș i urmărite următoarele
aspecte: definirea ș i analiza c erin ț elor func ț ionale ș i non-functionale precum consistenta,
performanta, disponibilitatea, scalabilitatea si alegerea modelului de date optim
pentru query-urile utilizate cel mai frecvent.

Rezultatele comparatiei dintre o baza de date relationala si Casandra ​ se rezuma la
faptul că baza de date Cassandra oferă multe avantaje comparativ cu solu ț iile clasice de tip
rela ț ional, ea prezintă de ase menea ș i câteva dezavantaje semnificati ve.

Punctele slabe ale acestei solu ț ii sunt: fără tranzac ț ii, fără JOIN-uri si fără interogări
complexe.

Rezultatul studiului arata ca o baza de date relationala la un volum mare de interogari
(30 000) are un timp de raspuns mai mic pe cand baza de date Cassandra are un timp de
raspuns mai mare.

Diferenta mare a timpului de raspuns a bazei de date Cassandra se explica prin faptul ca
aceasta ​ este optimizată pentru sute de cititori ș i scriitori simultani, lucreaza pe mai multe noduri si
cu date de ordinul milioanelor, spre deosebire de MySQL ( ș i alte DB rela ț ionale) care sunt
optimizate pentru a fi foarte rapide într-un singur nod

NoSQL reprezintă un pas important în dezvoltarea mecanismelor de persistare a
datelor care necesită o schimbare în modul care trebuie să gândim aplica ț iile.

Fie că o facem din necesitate sau din curiozitate programatică, consider că NoSQL
este o tehnologie ce merită învă ț ată.

Bibliografie

Link-uri

[1] ​ https://www.scribd.com/document/80531199/Managementul-Bazelor-de-Date
[2] ​ http://www.seap.usv.ro/~valeriul/lupu/cafec/capitolul1.pdf
[3] ​ http://civile.utcb.ro/cmat/cursrt/bd2.pdf
[4] ​ http://www.umfcv.ro/files/0/3/03_Baze%20de%20date.pdf
[5] ​ http://vega.unitbv.ro/~cataron/Courses/BD/BD_Cap_5.pdf
[6] ​ http://marplo.net/php-mysql/baze_de_date.html
[7] ​ http://www.elth.pub.ro/~preda/teaching/SPABD/SPABD_10.pdf
[8] ​ https://trends.google.com/trends/explore?q=NoSQL
[9]https://commons.wikimedia.org/wiki/File:Cassandra_logo.svg
[10] ​ https://www.todaysoftmag.ro/article/1372/apache-cassandra-primii-pasi
[11] ​ http://users.utcluj.ro/~civan/thesis_files/2016_DavidMarian_documentatie_final.pdf
[12] ​ https://db-engines.com/en/ranking
[13] ​ https://www.tutorialspoint.com/cassandra/cassandra_data_model.htm
[14] ​ https://www.ibm.com/developerworks/library/ba-set-up-apache-cassandra-architecture/i
ndex.html
[15] ​ https://www.sitepoint.com/sql-vs-nosql-differences/
[16] ​ http://byterot.blogspot.ro/2012/11/nosql-benchmark-redis-mongodb-ravendb-cassandra-
sqlserver.html
[17] ​ http://www.seap.usv.ro/~valeriul/lupu/html_php_mysql.pdf
Cărti
1. Cassandra Succinctly by Marco Svaljec
[18] ​ http://ebooks.syncfusion.com/downloads/Cassandra_Succinctly/Cassandra_Succinctly.
pdf?AWSAccessKeyId=AKIAJGEHGHZTIAKVVUIQ&Expires=1517754615&Signature=X%2FrZwZ9FoJ
PhpO%2Fn8%2BTJIkU%2FsXU%3D
2. Extracting Data from NoSQL Databases A Step towards Interactive Visual Analysis
of NoSQL Data by PETTER NÄSHOLM
[19] ​ http://publications.lib.chalmers.se/records/fulltext/155048.pdf
3. ​ NoSQL Databases by Christof Strauch
[20] ​ http://www.christof-strauch.de/nosqldbs.pdf

Similar Posts