• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Miscarea "NoSQL" in contextul Web-ului social/semantic
 

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

on

  • 1,987 views

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

Statistics

Views

Total Views
1,987
Views on SlideShare
1,975
Embed Views
12

Actions

Likes
0
Downloads
48
Comments
0

2 Embeds 12

http://elena-oana.blogspot.com 11
http://www.docseek.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • “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 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. ¸
    • “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 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{
    • “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 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
    • “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/