"Miscarea" NoSQL a aparut ca o consecinta a evolutiei Web-ului social/semantic, din necesitatea unor aplicatii precum retelele sociale de a
rezolva problema scalabilitatii. Diferitele abordari implica e renuntarea
la proprietatile oferite de bazele de date traditionale, e regandirea sis-
temelor relationale de la cap la coada.
Informatica manageriala Afaceri Electronice Patrascu Mihaela Hanelore
Miscarea "NoSQL" in contextul Web-ului social/semantic
1. “Mi¸carea” NoSQL ˆ contextul Web-ului
s ın
social/semantic
Elena-Oana T˘b˘ranu ¸i Anna-Maria Metzak
a a s
Facultatea de Informatic˘
a
Universitatea “Alexandru I. Cuza” Ia¸i
s
{elena.tabaranu,anna.metzak}@info.uaic.ro
Abstract. “Mi¸carea” NoSQL a ap˘rut ca o consecinta a evolutiei Web-
s a ¸˘ ¸
ului social/semantic, din necesitatea unor aplicatii precum retelele so-
¸ ¸
ciale de a rezolva problema scalabilit˘¸ii. Diferitele abord˘ri implic˘
at a a
fie renuntarea la propriet˘¸ile oferite de bazele de date traditionale, fie
¸ at ¸
regˆndirea sistemelor relationale de la cap la coad˘.
a ¸ a
Key words: NoSQL, Web social, sisteme distribuite, scalabiliatate, Face-
book, Cassandra, CouchDB, Hadoop, HiperTable
1 Introducere
Termenul NoSQL refer˘ o suit˘ de noi tehnologii pentru baze de date ce nu
a a
urmeaz˘ modelul relational ¸i nu ofer˘ garantiile ACID 1 .
a ¸ s a ¸
La sfˆr¸itul anilor ’90 ¸i ˆ
as s ınceputul anilor ’00 siturile web produceau continut¸
pentru un utilizator ce se multumea cu simplul rol de consumator, iar modelele
¸
de acces la date pentru acest tip de aplicatii au devenit foarte r˘spˆndite.
¸ a a
ˆ contextul Web-ului social, utilizatorul a devenit nu doar consumator de
In
continut, ci mai ales produc˘tor de continut. Acest lucru a avut drept consecint˘
¸ a ¸ ¸a
o redirectionare a arhitecturii aplicatiilor dinspre cele orientate spre citire masiv˘
¸ ¸ a
de date spre cele de citire/scriere ¸i mai apoi spre cele de scriere masiv˘ de date.
s a
Astfel, a ap˘rut necesitatea de a schimba modul de stocare ¸i reg˘sire a datelor
a s a
pe Web.
Majoritatea a ˆıncercat s˘ rezolve acest˘ problem˘ renuntˆnd la propriet˘¸ile
a a a ¸a at
oferite de bazele de date traditionale ¸i ˆ
¸ s ıncorporˆnd mai mult˘ logic˘ cu privire la
a a a
baza de date ˆ cadrul aplicatiei respective. Altii au regˆndit sistemele relationale
ın ¸ ¸ a ¸
de la cap la coad˘, cu diferente ˆ functie de modelul de la care au plecat.
a ¸ ın ¸
2 “Mi¸carea” NoSQL
s
“Mi¸carea” NoSql a ap˘rut din necesitatea scal˘rii unor sisteme pentru care
s a a
un model relational cu cele mai bune resurse hardware, optimizat fiind pentru
¸
1
Abreviere de la Atomicitate, Consistenta, Izolare, Durabilitate - propriet˘¸i ale unei
¸˘ at
baze de date ce garanteaz˘ procesarea tranzactiilor.
a ¸
2. 2 Elena-Oana T˘b˘ranu, Anna-Maria Metzak
a a
acestea, nu face fat˘ numeroaselor operatii de actualizare combinate cu cele de
¸a ¸
join.
ˆ contextul unor aplicatii mari ˆ
In ¸ ıntr-adev˘r scalabile, bazele de date relatio-
a ¸
nale sunt mari consumatoare de timp. Datele normalizate, join-urile, tranzactiile
ACID sunt definite ca anti-modelele relativ la scalabilitate. Partionarea nu re-
¸
zolv˘ aceste probleme prin divizarea datelor ˆ bucati mai mici. ˆ realitate cea
a ın ¸ In
mai mare problem˘ a partition˘rii bazelor de date relationale este c˘ acestea nu
a ¸ a ¸ a
au fost proiectate ˆ aceast˘ directie, iar multe dintre beneficiile pentru care au
ın a ¸
fost construite initial sunt ˆ aturate.
¸ ınl˘
Partitionarea nu poate fi privit˘ ca o solutie real˘ deoarece introducerea sa
¸ a ¸ a
ˆ logica unei aplicatii implic˘ problema netrivial˘ de a alipi datele din diverse
ın ¸ a a
tabele. Dac˘ exist˘ posibilitatea scal˘rii modelului pe vertical˘, aceasta este cea
a a a a
mai bun˘ abordare. Chiar ˆ cazul scal˘rii datelor pe vertical˘, migrarea unei
a ın a a
baze de date MySQL foarte mare poate dura foarte mult. Acesta e unul din
motivele pentru care unele companii prefer˘, atunci cˆnd aplicatiile lor permit
a a ¸
acest lucru, baze de date ce nu utilzeaz˘ o schem˘.
a a
Scalarea pe orizontal˘2 a unei aplicatii sacrific˘ normalizarea, join-urile, tran-
a ¸ a
zactiile ACID ¸i nu trebuie neap˘rat realizat˘ cu sisteme RDBMS3 , totul de-
s a a
pinde de aplicatie ¸i de necesit˘¸ile de scalare a operatiilor de scriere. Pentru
¸ s at ¸
scalarea operatiilor de citire exist˘ posibilitatea gestion˘rii unor subordonati
¸ a a ¸
care s˘ replice ˆ timp real toate cererile c˘tre baza de date master ¸i ˆ
a ın a s ınfiintarea
¸
unui router proxy ˆ ıntre clienti ¸i sistem.
¸ s
Aplicatii aliniate Web-ului social/semantic precum retelele sociale au ˆ
¸ ¸ ın-
tˆmpinat probleme precum:
a
– Toate datele trebuie s˘ fie disponibile ˆ orice moment.
a ın
– Partitionarea unui astfel de sistem este dificil˘ deoarece toat˘ lumea este
¸ a a
conectat˘.
a
– Datele trebuie p˘strate ˆ cache-ul RAM pentru a fi accesate cˆt mai rapid.
a ın a
– Num˘rul exponential de leg˘turi dintre entit˘¸ile sistemului implic˘ necesi-
a ¸ a at a
tatea scal˘rii la un nivel superior.
a
– Post˘rile utilizatorilor cu un num˘r mare de prieteni sunt problematice
a a
deoarece graful social trebuie traversat cel putin o dat˘ la fiecare postare
¸ a
pentru a determina cine trebuie s˘ primeasc˘ actualizarea respectiv˘.
a a a
– Parcurgerea unor grafuri foarte mari ˆ timp real, precum ¸i actualizarea
ın s
post˘rilor sunt operatii costisitoare.
a ¸
Aplicatia web Facebook a fost printre primele proiecte ce s-au confruntat cu
¸
astfel de probleme de scalabiliate. Dezvoltarea unei retele sociale pentru sute de
¸
milioane de utilizatori slab conectati s-a dovedit a fi un lucru nu foarte u¸or.
¸ s
Folosind NoSQL, Facebook a reu¸it s˘ dep˘¸easc˘ problema scal˘rii masive.
s a as a a
Un alt exemplu de retea social˘ ce s-a confruntat cu probleme de scalabilitate
¸ a
este Digg. Un utilizator al acestei aplicatii web are ˆ medie 100 de prieteni
¸ ın
2
Ad˘ugarea unui nou nod la un sistem, de exemplu un nou calculator ˆ
a ıntr-un sistem
distribuit. Aplicatii directe ˆ analiza seismic˘, ˆ trecut doar de supercalculatoare
¸ ın a ın
3
Abreviere de la termenii din limba englez˘ Relational Database Management System.
a
Se traduce prin sisteme relationale management al bazelor de date.
¸
3. “Mi¸carea” NoSQL ˆ contextul Web-ului social/semantic
s ın 3
“urm˘ritori” responsabili cu 300 de milioane de post˘ri zilnice, 3000 de operatii
a a ¸
de scriere pe secund˘, 7GB de date noi stocate ˆ fiecare zi ¸i 5TB de date
a ın s
“plimbate” ˆ ıntre 50-60 de servere.
Spre deosebire de aplicatiile obi¸nuite, retelele sociale implic˘ o complexi-
¸ s ¸ a
tate mult mai mare din punct de vedere al scalabilit˘¸ii, iar tehnologia NoSQL
at
propune o solutie pentru a rezolva aceast˘ problem˘.
¸ a a
Tehnologia NoSQL este suficient de matur˘ pentru a fi utilizat˘ ˆ practic˘,
a a ın a
dar sunt putine aplicatiile ce au nevoie de scalabiliatete masiv˘. ˆ majoritatea
¸ ¸ a In
cazurilor modelul relational traditional este suficient.
¸ ¸
Marele entuziasm de care se bucur˘ mi¸carea NoSQL se datoreaz˘ divergen-
a s a
¸elor de opinii cu privire la produsele bazate pe acest˘ tehnologie. Lucru foarte
t a
diferit fat˘ de RDBMS, care a ˆ
¸a ınceput cu un unic pivot denumit SQL capabil
s˘ creeze rˆnduri ¸i coloane de date bazate pe teoria matematic˘ a operatiilor
a a s a ¸
cu multimi. Astfel, fiecare aplicatie a adoptat aceea¸i arhitectur˘ de stocare a
¸ s a
datelor, indiferent de modul ˆ care acestea urmau s˘ fie procesate.
ın a
3 Proiecte bazate pe tehnologia NoSQL
3.1 Cassandra
Cassandra este un sistem distribuit open source de management al datelor. A
fost dezvoltat initial de Facebook pentru stocarea unor cantitati mari de date.
¸
Jeff Hammerbacher, cel care conducea echipa Facebook la momentul dezvoltarii
acestui proiect, l-a descris ca un model de date bazat pe structura BigTable4 a
celor de la Google, cu o infrastructura asem˘n˘toare cu Dynamo 5 a celor de la
a a
Amazon.
Proiectul poate fi gˆndit ca un imens tablou cu patru sau cinci dimensiuni,
a
fiecare dimensiune a matricei are ata¸at un index bazat pe cheile stocate la acel
s
nivel. Puterea real˘ vine de la nivelul optional, al cincilea ˆ tabloul asociativ,
a ¸ ın
care poate transforma o arhitectur˘ simpl˘, bazat˘ pe uple cheie-valoare, ˆ
a a a ıntr-o
arhitectur˘ de liste sortate, bazat˘ pe un index ce ¸ine de specificatiile utiliza-
a a t ¸
torului. Al cincilea nivel este numit SuperColumn, ¸i este unul din punctele forte
s
ale acestui proiect.
Principale probleme care au dus la dezvoltarea sistemului Cassandra:
– multitudine de date: copii ale mesajelor, indici inver¸i pentru mesaje, date
s
stocate per utilizator;
4
Sistem patentat de baze de date ce ofer˘ un grad sporit de performanta ¸i compresie,
a ¸˘ s
construit cu sistemul de fi¸iere Google (GFS). Nu este disponibil ˆ afara companiei,
s ın
de¸i Google ofer˘ acces la el prin intermediul Google App Engine. Folosit de aplicatii
s a ¸
precum MapReduce ce actualizeaz˘ datele din Google Reader, Google Maps, Google
a
Book Search, Google Earth, Blogger.com, Youtube, etc.
5
Sistem patentat de gestiune a datelor structurate sub form˘ de perechi cheie-valoare.
a
Are atˆt propriet˘¸ile unei baze de date, cˆt ¸i cele ale unei tabele hash distribuite.
a at a s
Nu este expus direct sub forma unui serviciu web, dar este folosit ˆ cadrul unor
ın
servicii web oferite de Amazon.
4. 4 Elena-Oana T˘b˘ranu, Anna-Maria Metzak
a a
– num˘rul mare de cereri de actualizare a informatiilor;
a ¸
– lipsa unei solutii performante pe piat˘ care s˘ ˆ
¸ ¸a a ıntruneasc˘ cerintele de mai
a ¸
sus.
Cassandra nu are puncte unice de e¸ec ¸i poate scala de la o ma¸ina la cˆteva
s s s a
mii de ma¸ini grupate ˆ diferite centre de date. Nu are un punct central, iar
s ın
oricˆte date pot fi scrise la oricare dintre nodurile din cluster ¸i, de asemenea,
a s
pot fi citite de la orice alt nod din cluster.
Acest proiect pune la dispozitie posibilitatea alegerii c˘ii cea mai potrivit˘
¸ a a
dintre consistent˘ ¸i disponbilitatea datelor, ˆ functie de particularit˘¸ile aplica-
¸a s ın at
¸iei ¸i ale domeniului problem˘. De asemenea, ofer˘ garantia faptului c˘ dac˘ un
t s a a ¸ a a
nod va c˘dea, un alt nod va fi folosit pentru a-l ˆ
a ınlocui f˘r˘ probleme.
aa
Modelul de date propus de Cassandra este destul de bogat pentru a spri-
jini o gama larg˘ de aplicatii: suport˘ ˆ acelasi timp scalabilitate extrem˘ ¸i
a ¸ a ın a s
disponibilitate ridicat˘, tr˘s˘turi pe care doar cˆteva alte baze de date le pot
a aa a
oferi. Acestea sunt disponibile mentinˆnd o latent˘ mai mic˘ decˆt a altor solutii
a ¸a a a ¸
disponibile.
Cassandra poate stoca date de pˆna la 50GB pe disc, ˆ doar 0.12 milise-
a ın
cunde, mai rapid de 2500 de ori decˆt MySQL.
a
Exemplu de utilizare a unei libr˘rii client pentru Cassandra folosind Java.
a
KeySpace ks = cl.getKeySpace("Keyspace1") ;
// insert value
ColumnPath cp = new ColumnPath("Standard1" , null,
"testInsertAndGetAndRemove".getBytes("utf-8"));
for(int i = 0 ; i < 100 ; i++){
ks.insert("testInsertAndGetAndRemove_"+i, cp ,
("testInsertAndGetAndRemove_value_"+i).getBytes("utf-8"));
}
//get value
for(int i = 0 ; i < 100 ; i++){
Column col = ks.getColumn("testInsertAndGetAndRemove_"+i,
cp);
String value = new String(col.getValue(),"utf-8") ;
assertTrue( value.equals("testInsertAndGetAndRemove_value_"
+i) ) ;
}
//remove value
for(int i = 0 ; i < 100 ; i++){
ks.remove("testInsertAndGetAndRemove_"+i, cp);
}
try{
5. “Mi¸carea” NoSQL ˆ contextul Web-ului social/semantic
s ın 5
ks.remove("testInsertAndGetAndRemove_not_exist", cp);
}catch(Exception e){
fail("remove not exist row should not throw exceptions");
}
//get already removed value
for(int i = 0 ; i < 100 ; i++){
try{
Column col = ks.getColumn("testInsertAndGetAndRemove_"+i, cp);
fail("the value should already being deleted");
}catch(NotFoundException e){
}catch(Exception e){
fail("NotFoundException:" + e.toString() );
}
}
pool.releaseClient(cl) ;
pool.close() ;
3.2 CouchDB
Apache CouchDB, denumit ˆ mod obi¸nuit CouchDB, este o baz˘ de date orien-
ın s a
tat˘ document, gratuit˘ ¸i open-source, scris˘ ˆ limbajul de programare Erlang.
a as a ın
Sistemul este proiectat pentru a favoriza replicarea local˘ ¸i pentru a fi scalat pe
as
verical˘ pe o gama larg˘ de dispozitive.
a a
CouchDB nu este un sistem de gestiune a bazelor de date relationale, iar
¸
ˆ loc de a stoca datele pe linii ¸i coloane, baza de date valorific˘ o colectie
ın s a
de documente JSON. Documentele dintr-o colectie nu trebuie sa ˆ ımpart˘¸easc˘
as a
o schem˘, dar p˘streaz˘ abilit˘¸i de interogare prin intermediul vizualiz˘rilor.
a a a at a
Vizualiz˘rile sunt definite cu functii agregat ¸i sunt calculate ˆ paralel, la fel ca
a ¸ s ın
MapReduce.
Vizualiz˘rile, ˆ general, sunt stocate ˆ baza de date, iar indec¸ii lor sunt
a ın ın s
actualizati continuu, chiar dac˘ interogarile introduc vizualiz˘ri temporare.
¸ a a
CouchDB sustine un sistem de vizualiz˘ri folosind servere soclu externe, pre-
¸ a
cum ¸i un protocol bazat pe JSON. Drept consecint˘, serverele de vizualiz˘ri
s ¸a a
ofer˘ suport pentru mai multe limbi.
a
CouchDB expune un API HTTP bazat pe REST, iar un num˘r mare de a
clienti sunt deja disponibili. ˆ plus, o arhitectur˘ plug-in permite utilizarea
¸ In a
diferitelor limbaje de programare pentru serverul de vizualiz˘ri, precum JavaScript
a
ˆ mod implicit, PHP, Ruby, Python ¸i Erlang. Alte limbaje sunt u¸or de ad˘ugat.
ın s s a
CouchDB a fost acceptat ˆ incubatorul Apache ˆ februarie 2008 ¸i a devenit
ın ın s
proiect ˆ noiembrie 2008. ˆ ciuda num˘rul redus al versiunii (0.10), acesta este
ın In a
deja ˆ uz ˆ cadrul mai multor proiecte software ¸i situri web. De exemplu,
ın ın s
Ubuntu folo¸te aceast˘ tehnologie pentru a sincroniza adresa ¸i datele de marcaj.
s a s
6. 6 Elena-Oana T˘b˘ranu, Anna-Maria Metzak
a a
3.3 Apache Hadoop
Proiectul Hadoop al celor de la Apache este un framework Java open source sub
o licet˘ public˘ care suport˘ aplicatii distribuite ce lucreaz˘ intensiv cu date.
¸a a a ¸ a
Acesta permite aplicatiilor s˘ lucreze cu mii de noduri ¸i peta-octeti de date.
¸ a s ¸
Hadoop a fost inspirat de lucr˘rile despre MapReduce ¸i Google File System
a s
(GFS) a celor de la Google.
Hadoop a fos creat de c˘tre Doug Cutting ¸i a fost dezvoltat initial pentru a
a s ¸
suporta distributia pentru motoul de c˘utare Nutch.
¸ a
Hadoop include urm˘torele subproiecte:
a
– Hadoop Common: utilitarele de baz˘ ce suport˘ celelale subproiecte Hadoop.
a a
– Avro: un sistem de serializare al datelor ce pune la dispozitie integrare di-
¸
namic˘ cu limbaje de scripting.
a
– Chukwa: un sistem de colectare de date pentru gestionarea de sisteme dis-
tribuite de mari dimensiuni.
– HBase: O baz˘ de date distribuit˘ ¸i scalabil˘ ce suport˘ stocarea structurat˘
a as a a a
a datelor pentru tabele mari.
– HDFS: un sistem distribuit de fi¸iere care ofer˘ acces nelimitat la datele
s a
aplicatiei.
¸
– Hive: o infrastructur˘ de stocare a datelor care ofer˘ o sumarizare a datelor
a a
¸i interogare ad-hoc.
s
– MapReduce: un framework pentru procesarea distribuit˘ a seturilor mari de
a
date pe clustere.
– Pig: limbaj de nivel ˆ
ınalt pentru flux de date ¸i framework de executie pentru
s ¸
calcul paralel.
– ZooKeeper: un serviciu performant de coordonare pentru applicatii distribuite.
¸
Hadoop este un proiect Apache de cel mai ˆ ınalt nivel, fiind construit ¸i
s
utilizat de o comunitate din ˆ ıntreaga lume. Yahoo! a fost cel mai mare con-
tribuitor la proiect ¸i utilizeaz˘ Hadoop ˆ mod constant ˆ c˘utarea pe web ¸i
s a ın ın a s
publicitate. IBM si Google au anuntat intentia de a utiliza Hadoop pentru a
¸ ¸
sustine cursuri universitare de programare distribuit˘. Pe lˆng˘ Yahoo!, multe
¸ a a a
alte organizatii folosesc Hadoop pentru a rula calcule distrbuite de mari dimen-
¸
siuni. Printre aceste se num˘r˘ EHarmony, Facebook, Freebase, Fox Interactive
aa
Media, LinkedIn, Meebo, The New York Times.
3.4 Hypertable
Hypertable este un sistem distribuit de stocare a datelor, proiectat pentru a
sprijini aplicatii care necesit˘ performant˘ maxim˘, scalabilitate ¸i fiabilitate.
¸ a ¸a a s
Hypertable va fi deosebit de valoros pentru orice organizatie care are nevoie
¸
s˘ gestioneze date ce evolueaz˘ rapid pentru a sustine aplicatii ˆ timp real.
a a ¸ ¸ ın
Modelat dup˘ bine cunoscutul proiect BigTable al celor de la Google, Hypertable
a
este conceput pentru a gestiona stocarea ¸i prelucrarea de informatii pe un grup
s
mare de servere, oferind astfel rezistent˘ la e¸ecurile ma¸inii sau a componentelor.
¸a s s
Hypertable este un proiect open source folosit de c˘tre motorul de c˘utare
a a
local˘ Zvents Inc. petru a scrie 1 miliard de celule de date pe zi.
a
7. “Mi¸carea” NoSQL ˆ contextul Web-ului social/semantic
s ın 7
4 Concluzii
Sistemele ce ofer˘ suport pentru NoSQL functioneaz˘ ˆ mod diferit, dar con-
a ¸ a ın
ceptul de baz˘ al acestei tehnologii r˘mˆne acela¸i: ˆ
a a a s ımbun˘t˘¸irea scalabilit˘¸ii ¸i
a at at s
performantei folosind modele de baze de date ce nu ofer˘ toate functionalit˘¸ile
¸ a ¸ at
unui sistem relational, dar ˆsi mentin utilitatea. Similar cu ˆ
¸ ı¸ ¸ ınceputurile MySQL,
aceast˘ tehnologie a renuntat la tranzactii ˆ favoarea unui cˆstig major de
a ¸ ¸ ın a
performant˘.
¸a
5 Bibliografie
1. Hiper Table, http://www.hypertable.org/
2. ***, http://www.computerworld.com/s/article/9135086/No_to_SQL_Anti_
database_movement_gains_steam_
3. ***, http://debasishg.blogspot.com/2009/11/nosql-movement-excited-with-coexistence.
html
4. ***, http://www.eflorenzano.com/blog/post/my-thoughts-nosql/
5. ***, http://www.brightyellowcow.com/blog/Evaluating-the-API-of-Cassandra-BigTable-.
html
6. Cassandra Wiki, http://wiki.apache.org/cassandra/ClientExamples
7. Apache Hadoop, http://hadoop.apache.org/