Miscarea "NoSQL" in contextul Web-ului social/semantic

  • 1,377 views
Uploaded on

"Miscarea" NoSQL a aparut ca o consecinta a evolutiei Web-ului social/semantic, din necesitatea unor aplicatii precum retelele sociale de a …

"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.

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,377
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
49
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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/