Professional Documents
Culture Documents
Ljudevit Habjanec Zavrsni Final
Ljudevit Habjanec Zavrsni Final
Abstract In this paper, we examine what new features are available in NoSql database systems in comparison with traditional relational database systems. MongoDB is chosen for in depth analysis of its features: horizontal scaling, consistency mechanism, durability guaranty, availability and query support. Also, benchmarks for MongoDB and MySQL database systems are presented, showing comparisons in terms of speed for reading, writing and executing queries on a two node distributed system.
Sadraj 1. 2. Uvod .......................................................................................................... 6 Specifinosti NoSql baza podataka ........................................................... 7 2.1. 2.2. 2.3. 2.4. Performanse ....................................................................................... 8 Dostupnost podataka .......................................................................... 9 CAP teorem ........................................................................................ 9 Vrste NoSql baza podataka .............................................................. 10 Key-value ................................................................................... 11 Column-oriented......................................................................... 11 Graph ......................................................................................... 12 Document oriented ..................................................................... 13
MongoDB ................................................................................................ 14 3.1. 3.2. 3.3. 3.4. 3.5. Specifinosti...................................................................................... 14 Primjena ........................................................................................... 15 Nedostaci i ogranienja .................................................................... 15 Struktura podataka ........................................................................... 17 Dohvat podataka............................................................................... 18 Skupovi heterogenih entiteta ...................................................... 19 N-N veze .................................................................................... 20 MapReduce funkcije ................................................................... 22 Usporedba SQL jezika i rada s MongoDB JSON upitima ........... 23
Atomarnost operacija ........................................................................ 26 Replikacija ........................................................................................ 27 Podjela na odlomke .......................................................................... 30 Komponente sustava s podjelom na odlomke ............................ 30
3.8.1.
ii
4.
aplikacije............................................................................................................... 32 4.1. 4.2. 4.3. 4.4. 4.5. 5. 6. Struktura podataka ogledne aplikacije .............................................. 32 Konfiguracija MySql posluitelja ....................................................... 33 Konfiguracija MongoDB posluitelja ................................................. 33 Testiranje .......................................................................................... 33 Rezultati testiranja ............................................................................ 34
iii
Popis oznaka i kratica SUBP engl sustav za upravljanje bazama podataka engleski
iv
Popis slika Slika 1. Horizontalna i vertikalna skalabilnost..................................................... 7 Slika 2. Usporedba NoSql i tradicionalnih relacijskih SUBP-ova ........................ 8 Slika 3. Poveanje performansi tradicionalnog SUBP-a uz predpohranjivanje .. 9 Slika 4. CAP teorem i neki NoSql SUBP-ovi s odgovarajuim svojstvima ........ 10 Slika 5. Column oriented BigTable baza podataka........................................... 12 Slika 6. Poznanstva u Graph bazi podataka .................................................... 13 Slika 7. Relacijska shema Osobe-Nekretine .................................................... 18 Slika 8. Prebrojavanje pojavljivanja mjeseci MapReduce funkcijama .............. 22 Slika 9. Proces nakon kvara nadreenog posluitelja kod replikacije nadreenipodreeni ............................................................................................................. 28 Slika 10. Proces oporavka kvara nadreenog kod skupa replika ..................... 29 Slika 11. Komponente MongoDB sustava s podjelom na odlomke .................. 31 Slika 12. Struktura podataka ogledne aplikacije ............................................... 32 Slika 13. Usporedba trajanja unosa korisnika i avatara .................................... 34 Slika 14. Usporedba simulacije borbi za razliitu koliinu korisnika ................. 35 Slika 15. Usporedba trajanja operacija dohvata statistike korisnika, avatara i borbi ..................................................................................................................... 36 Popis tablica Tabela 1. Primjer MongoDB dokumenta .......................................................... 17
Uvod
1. Uvod
Razvoj poslovnih aplikacija, web aplikacija i socijalnih mrea nezamisliv je bez upotrebe SUBP-ova (sustava za upravljanje bazama podataka). SUBP-ovi omoguuju razvoj aplikacija koje zahtijevaju spremanje, dohvat, zatitu integriteta i kontrolu istodobnog pristupa podacima. Trenutno najzastupljeniji SUBP-ovi zasnovani su na relacijskom modelu i koriste SQL jezik, te se najee koriste kada je potreban rad vie korisnika uz ouvanje integriteta podataka. Od 1960-ih, kada su se poeli razvijati sustavi temeljeni na relacijskom modelu, pa do danas, pojavljivali su se sustavi s razliitim pristupima poput objektno orijentiranih i XML baza podataka. Takvi pristupi nisu zamijenili relacijski model te su uglavnom integrirani u postojee SUBP-ove ili se koriste u vrlo uskim i specijaliziranim primjenama. Posljednjih nekoliko godina sve veom zastupljenosti web aplikacija i socijalnih mrea pojavila se potreba za brzim razvojem aplikacija za velik broj korisnika. Postojei relacijski SUBP-ovi pokazali su se kompliciranim u takvim sluajevima kada je bilo potrebno podravati brzo rastui broj korisnika i brz razvoj aplikacija. Kao rjeenje navedenih problema pojavljuju se NoSql baze podataka koje donose jednostavniju skalabilnost u usporedbi s tradicionalnim relacijskim SUBPovima na velikom broju posluitelja, te razvoj usmjeren na specifine primjene poput socijalnih mrea i programskih rjeenja u oblacima (engl. cloud computinga). Zajednika obiljeja novonastalih baza podataka su to nisu relacijske i to nude mogunosti rada s razliitim vrstama podataka poput dokumenata i grafova, pa se i prema tome nazivaju NoSql ne samo SQL (eng. not only SQL i eng. not relational) baze podataka.
SUBP posluitelj
Slika 1. Horizontalna i vertikalna skalabilnost Kako bi se omoguila jednostavnija horizontalna skalabilnost (u odnosu na tradicionalne relacijske
1
SUBP-ove)
NoSql
baze
podataka
uglavnom
ne
zadovoljavaju ACID
omoguuje najvanije prednosti NoSql baza podataka: brzina i odaziv kod rada i izvanredna skalabilnost. Zadovoljavanje ACID uvjeta poveava kompleksnost SUBP-a. U odreenim primjenama ta svojstva su manje vana od brzine i
skalabilnosti. Kada su ACID svojstva prijeko potrebna, NoSql baza podataka nije prikladan izbor, te je zato potrebno poznavati svojstva relacijskih i NoSql baza podataka kako bi se mogao napraviti dobar odabir SUBP-ova kod razvoja aplikacija.
Problem
2.1. Performanse
Kod tradicionalnih relacijskih SUBP-ova gdje postoji potreba za brzim odazivom kod zapisivanja i itanja podataka esto se koristi zasebni sustav za predpohranjivanje (engl. caching). Podaci se uz pomo sustava za
predpohranjivanje prvo pohranjuju u radnu memoriju, a tek onda u bazu podataka (najpoznatiji takav mehanizam je Memcached). Predpohranjivanje se moe ugraditi u aplikaciju i u tom sluaju ubrzavaju se samo itanja dok se zapisivanja i dalje moraju obraditi u SUBP-u to bitno smanjuje performanse u primjenama gdje je odnos zapisivanja i itanja podjednak. Kod nekih NoSql SUBP-ova poput MongoDB-a, predpohranjivanje ugraeno je u samu bazu podataka koja se, ako je to mogue, cijela smjeta u radnu memoriju i time poveava performanse.
Aplikacijski posluitelji
Memchached posluitelji
SUBP posluitelj
Dostupnost svaki klijent moe uvijek itati i zapisivati Partition tolerance sustav moe dalje funkcionirati, bez obzira to dijelovi sustava ne mogu meusobno komunicirati
Availability Dostupnost
A
MySQL (i ostali tradicionalni SUBP-i) Hypergraph Neo4J Mogude odabrati samo 2 svojstva CouchDB Cassandra Riak
C
Consistency Konzistencija
P
MongoDB Hbase Redis
Partition tolerance Tolerancija na ispad dijela sustava
dostupnost. Time se poveava sloenost kod raspodjele sustava na vie vorova. NoSql SUBP-ovi, za razliku od tradicionalnih SUBP-ova, koncentriraju se na PA ili PC rtvuje se konzistentnost ili dostupnost dok tolerancija na podijeljenost uvijek ostaje kao bi se zadrala jednostavna skalabilnost.
10
podravaju skup BASE obiljeja3, za razliku od ACID-a kod tradicionalnih relacijskih SUBP-ova
otvorenog su koda
BASE svojstva NoSql SUBP-ova oznaavaju da su podaci: konzistentni u konanici, ali ne moe se garantirati da e oni biti konzistentni odmah po unosu u bazu podataka (engl. eventual consistency) promjenjivi, s obzirom da se mogu promijeniti i bez vanjskih utjecaja kako bi se zadovoljila konzistentnost (engl. soft state) dostupni ak i u sluajevima kada neki od vorova nisu dostupni (engl. basically available) Kako nepodravanje SQL jezika nije jedina bitna razlika u usporedbi s tradicionalnim relacijskim SUBP-ima, NoSql pojam se objanjava i kao engl. not only SQL ne samo SQL. U sljedeih nekoliko poglavlja objanjene su vrste SUBP-ova koji se svrstavaju pod pojam NoSql.
2.4.1. Key-value
Key-Value (parovi klju-vrijednost) je najjednostavniji oblik baze podataka. Prednosti Key-Value baza podataka su vrlo brzo zapisivanje i itanje bez obzira na koliinu podataka i bez utjecaja na skalabilnost. Nedostatak su vrlo ograniene mogunosti pretrage i analize podataka. Ovakav oblik baze podataka uglavnom se koristi za predpohranjivanje velike koliine podataka.
2.4.2. Column-oriented
Column-oriented (tabelarne) baze podataka su zapravo key-value baze podataka koje za pronalazak podataka koriste skup kljueva (npr. redak, stupac). Na taj nain grupiraju povezane podatke u jedan redak (to automatski podrazumijeva da podaci kad se spreme na disk budu fiziki homogeni). Nije potrebno unaprijed odrediti koliko se stupaca nalazi u retku i podaci se pretrauju po kljuu koji jednoznano odreuje redak.
Primjer jedne takve tabelarne baze podataka je BigTable koju koristi Google u veini svojih servisa, npr. za: indeksiranje Web-a, Google Earth, Google Analytics i Google Docs. BigTable je razvijen s ciljem da podrava skaliranje iznimno velike koliine (vie petabajta) strukturiranih podataka preko vie tisua posluitelja [5]. Svakom podatku pristupa se preko: kljua koji odreuje redak, kljua koji odreuje stupac i vremenske oznake. Vremenska oznaka slui za uvanje vie inaica istog podatka kroz odreeno vremensko razdoblje. Slika 5. prikazuje jedan redak BigTablea, u kojem se nalaze podaci prikupljeni s Web stranice www.cnn.com (klju retka), a razliiti strukturni dijelovi stranice su kljuevi stupaca. Podaci mogu imati vie inaica, npr. podaci u "contents:" stupcu imaju 3 inaice: t3, t5 i t6.
2.4.3. Graph
Graph baze podataka temeljene su na teoriji grafova te koriste vorove (s atributima) i veze izmeu vorova. Ne koriste indekse jer svaki vor ima veze na susjedne vorove. Npr. na slici 6. koja prikazuje osobe i njihove odnose, u sluaju da elimo pronai prijatelje "Osobe 1", slijedit emo sve veze "prijatelj" koje direktno pokazuju na njezine prijatelje, bez upotrebe indeksa koji bi sadravali sve veze svih osoba. Prikladne su za koritenje u socijalnim mreama gdje se ljudi povezuju vezama (npr. poznanstva ili prijateljstva) ili geografskih lokacija s vezama koje predstavljaju udaljenosti. Neo4J je najpoznatija takva baza podataka, dok npr. Twitter koristi FlockDB izgraenu na MySQL tehnologiji.
12
POZNAJE Osoba 2 Grad: Oroslavje Spol: M Osoba 3 Grad: New York Spol:
POZNAJE PRIJATELJ Osoba 4 Grad: Zapreid Spol: POZNAJE Osoba 5 Grad: Osijek Spol: M POZNAJE
13
MongoDB
3. MongoDB
MongoDB je NoSql baza temeljena na dokumentima iji je razvoj zapoeo 2007. godine u tvrtci 10gen. Verzija 1.4 izdana sredinom 2011. godine je prva verzija koja se smatra dovoljno stabilnom za koritenje u komercijalne svrhe. Izvorni kod dostupan je pod GNU licencom.
3.1. Specifinosti
- Svaki dokument sprema se kao jedan BSON objekt. BSON je binarni oblik JSON objekta. JSON je format zapisivanja podataka u obliku JavaScript sintakse koji je razvijen s ciljem da se lako ita, lako parsira i da mu struktura zauzima minimum podatkovnog prostora. Primjer jednog takvog dokumenta je Osoba s atributima ImePrezime i Godina: Osoba = { ImePrezime: Pero Peri, Godina: 1987 }; - Jezik za pretraivanje po vrijednostima atributa ili njihovim rasponima (engl. range queries) i pretraivanje uporabom regularnih izraza. Mogue je i pisanje korisnikih upita koji se sastoje od funkcija pisanih u JavaScript jeziku koje se izvravaju na posluitelju. - Nad svakim atributom moe se izgraditi indeks za bre pretraivanje - Podrka za nadreeni-podreeni (engl. master-slave) replikaciju. Nadreeni moe pisati i itati, dok podreeni ima samo mogunost itanja. Ispadanjem nadreenog posluitelja odabire se novi nadreeni bez prekida rada baze podataka i dostupnosti podataka. - Horizontalno skaliranje odabirom kljua na temelju kojeg se podaci raspodjeljuju na nekoliko odlomaka (engl. shard) (svaki odlomak se sastoji od nadreenog-podreenog posluitelja) - Spremanje binarnih podataka (slika, arhiva i sl.) unutar baze podataka, takoer koristei skaliranje i otpornost na ispadanje vorova - Automatsko ograniavanje koliine podataka moe se definirati maksimalan broj dokumenata. Kada se dosegne definirani maksimum, najstariji podaci se
14
MongoDB
poinju brisati unosom novih, to je posebno korisno kod obrade velike koliine podataka koji brzo zastarijevaju - Ugraena podrka za rad s geoprostornim podacima npr. pretraga dokumenata koji se nalaze unutar odreenog broja kilometara od zadane GPS lokacije. - Mogunost Fire & forget principa zapisivanja podataka unos i izmjena podataka moe se zatraiti od SUPB-a bez ekanja odgovora. Ukoliko se akcija ne uspije izvriti, klijentska aplikacija ne dobiva nikakav odgovor. Prednost ovakvog principa je brzina jer klijentska aplikacija moe odmah nastaviti s radom nakon izdavanje naredbe SUBP-u.
3.2. Primjena
Svoju primjenu MongoDB baza podataka s obzirom na svoje specifinosti nalazi u: - Zapisivanje dnevnika rada aplikacija (engl. Application Data Logs) - Sustavi za upravljanje sadrajem (engl. CMS content management systems), s obzirom da nije potrebno unaprijed odrediti shemu podataka pojedine zbirke dokumenata. - Online raunalne igre kod kojih je potreban velik broj zapisivanja i itanja velikog broja korisnika, a koji ne smiju utjecati na brzinu izvoenja - Svoju primjenu nalazi i kod brzog razvoja aplikacija jer nije potrebno unaprijed odreivati shemu baze podataka to olakava uvoenje novih atributa i vrsta dokumenata tijekom razvoja aplikacija - Openito kod mobilnih aplikacija zbog upravljanja geoprostornim podacima
MongoDB
Rad s financijskim, raunovodstvenim podacima i bankarskim transakcijama kod kojih je bitno nekoliko akcija izvriti kao jednu atomarnu akciju.
Analiza velike koliine nepromjenjivih podataka ili skladita podataka. Za takve primjene pogodniji su relacijski SUBP-ovi koji mogu pretraivati i analizirati podatke SQL jezikom
Kod rada s podacima kod kojih je potrebno spajati vie zbirki u jedan rezultat, s obzirom da MongoDB nema ekvivalent SQL JOIN naredbe
Kod rada s podacima gdje se trebaju generirati slijedne oznake poput rednih brojeva i sl. U ovakvim sluajevima potrebno je koristiti pomone tabele za efikasno dohvaanje sljedeeg rednog broja.
Dodatni nedostatak MongoDB-a je to je on tek kratko vrijeme dostupan na tritu u usporedbi s tradicionalnim relacijskim SUBP-ovima, te ima manje dokumentacije i manje osoba s iskustvom rada s MongoDB-om.
16
MongoDB
MongoDB dokument
{ "_id": ObjectID("4efa8d2b7d284dad101e4bc9"), "Ime" : "Pero", "Prezime : "Peri", "God roenja" : 1967, "Mjesto roenja": "Zagreb" }, { "_id" : ObjectID("4efa8d2b7d284dad101e4bc7"), "Ime" : "Hrvoje", "Prezime" : "Horvat", "God roenja" : 1955, "Majka" : "Ana"
Atribut "_id" je obavezan, automatski ga dodaje MongoDB kao klju koji jednoznano odreuje svaki dokument unutar kompletne baze podataka. Mogue je koristiti i dodatni vlastiti klju (npr. OIB kod osoba) nad kojim se izgradi jedinstveni indeks (engl. unique index).
17
DODATAK B
Slika 7. Relacijska shema Osobe-Nekretine Kako bismo spojili ove dvije relacije i dobili popis nekretnina s pripadajuim vlasnicima, potreban je sljedei SQL upit:
SELECT osobe.*, nekretnine.Adresa FROM osobe LEFT JOIN nekretnine ON nekretnine.VlasnikOIB = osobe.OIB Rezultat: OIB 21312312312 Ime Pero Prezime Peri Adresa Mokrice 100
MongoDB ne podrava spajanje u upitima, pa se koriste alternativna rjeenja: a) dvije zbirke, u jednu spremiti Osobe, a u drugu Nekretnine koja se povezuje s osobom preko "_id" kljua ili OIB-a, to je slino kao kod relacijske baze podataka, ali "spajanje" podataka je potrebno izvesti u aplikacijskom sloju:
Pseudo kod:
za svaku nekretninu { vlasnik:=osobe.find( { OIB: nekretnina.VlasnikOIB } ) }
18
DODATAK B
b) unutar dokumenta Osoba, spremiti pod-dokument Nekretnina, bez potrebe za jo jednom zbirkom (treba imati na umu ogranienje od 16Mb koliko maksimalno moe iznositi veliina jednog dokumenta)
{ "_id" : ObjectID("4efa8d2b7d284dad101e4bc9"), "OIB" : "21312312312", "Ime" : "Pero", "Prezime : "Peri", "Nekretnine" : { "Adresa" : "Mokrice 100", } }
Svojstvo PK ID NazivSvojstvo
Oblik ID 1 Tip ID 1
Isti problem daleko je jednostavnije i prirodnije rijeiti u MongoDB-u, gdje e se takoer spremati tip geometrijskih oblika, no nije unaprijed potrebno predvidjeti shemu za sve tipove geometrijskih oblika.
19
DODATAK B
MongoDB
Krug PK ID Promjer Povrina PK Kvadrat ID Promjer Povrina Pravokutnik PK ID Stranica A Stranica B Povrina
Geometrijski oblici
{ "_id" : ObjectID("4efa8d2b7d284dad101e4bc9"), "tip" : "krug", "povrina" : 3.14, "promjer" : 1, }, { "_id" : ObjectID("1efa8d2b7d284dad101egg44"), "tip" : "kvadrat", "povrina" : 1, "stranica" : 1, },
itd.
20
DODATAK B
Proizvod PK ID Naziv
Kategorija PK ID Naziv
U MongoDB-u moemo koristiti samo dvije zbirke, Proizvodi i Kategorije, povezujui ih tako da unutar svakog proizvoda spremamo sve kljueve kategorija u koje spada odabrani proizvod.
MongoDB
proizvodi: { _id: ObjectID("1efa8d2b7d284dad101egg44"), naziv: "MongoDB knjiga", kategorije: [ ObjectID("1232138d2284dad101ee3a5a7a"), ObjectID("030c00d2284dad101eec7cc5c4 ") ] } kategorije: { _id : ObjectID("1232138d2284dad101ee3a5a7a"); naziv: "Baze podataka" }, { _id : ObjectID("030c00d2284dad101eec7cc5c4 "); naziv: "NoSQL baze podataka" }
21
DODATAK B
Filter
Ulaz
SIJEANJ, VELJAA, SVIBANJ
Map
SIJEANJ, 1 VELJAA, 1 SVIBANJ, 1
Reduce
Finalize
Rezultat
SIJEANJ VELJAA OUJAK, TRAVANJ, SVIBANJ SIJEANJ PROSINAC VELJAA PROSINAC LIPAN.
SIJEANJ [1,1] VELJAA [1,1] SIJEANJ,2 VELJAA, 2 SVIBANJ, 1 PROSINAC, 2 LIPANJ, 1 SVIBANJ [1] PROSINAC [1,1] LIPANJ [1] SIJEANJ,2 VELJAA, 2 SVIBANJ, 1 PROSINAC, 2 LIPANJ, 1
SIJEANJ, PROSINAC
SIJEANJ, 1 PROSINAC, 1
22
DODATAK B
ALTER TABLE..
SELECT * FROM osobe SELECT * FROM osobe WHERE god>33 AND god<=40
SQL upiti s grupiranjem podataka poput prebrojavanja, sumiranja i sl. preslikavaju se u agregacijske funkcije u JSON upitima:
23
DODATAK B
SQL upit
SELECT COUNT(*) FROM osobe
Kompliciraniji SQL upiti preslikavaju se u MapReduce funkcije u JSON upitima. Prvi korak u sastavljanju MapReduce funkcije je napisati Map funkciju. Map funkcija se izvrava nad svakim dokumentom iz zbirke i s njome se odreuju kljuevi za grupiranje i prikupljanje podataka koji se kasnije koriste za izraun podataka. Slijedei primjer prikazuje funkciju koja grupira iznose po mjesecu i godini, priprema broj i iznos rauna. Map funkcija
map = function() { var mjesecIgodina = this.datum.getMonth() + this.datum.getYear(); var broj=0, zbroj=0; emit (mjesecIgodina, {broj=1, iznos=this.iznos } ); }
24
DODATAK B
Slijedei korak je napisati Reduce funkciju koja vri izraun grupiranih podataka, u ovom primjeru, ukupni iznos i broj rauna u mjesecu. Reduce funkcija
reduce = function(key, values) { var result { broj : 0, iznos : 0 }; values.forEach(function(value) { result.broj += value.broj; result.iznos += value.iznos; }); }
Ako je potrebno dodatno izraunati neke vrijednosti samo jednom za pojedine grupe, npr. u ovome primjeru prosjek iznosa rauna, potrebno je napisati i Finalize funkciju. Finalize funkcija
function prosjekFinalize(key, value) { if (value.broj > 0) value.prosjek = value.iznos / value.broj; return value; }
Na kraju je jo potrebno izvriti MapReduce funkciju nad eljenim podacima, u ovome primjeru samo za poslovnicu br. 1.: Map/reduce funkcija s filterom
filter = { poslovnica = 1 }; db.racuni.mapReduce(map, reduce, {query : filter, finalize: prosjekFinalize});
25
DODATAK B
Slijedei primjer prikazuje SQL upit i ekvivalentni primjer MapReduce funkcije u MongoDB-u. Npr. za pojedinog studenta izraunati koliko je ispita pisao i koja je prosjena ocjena svakog studenta:
SQL upit
SELECT COUNT(*) AS broj_ispita, AVG(ocjena) AS prosjecna_ocj
db.ispiti.group({ key : { studentOIB : true }, initial: { broj_ispita : 0, prosj_ocj : 0 }, reduce: function (doc, aggregator)
FROM ispiti
{ aggregator.broj_ispita+=1;
GROUP BY studentOIB }
aggregator.sum_ocjena += doc.ocjena;
DODATAK B
// Ukoliko je izmjena uspjeno izvrena, posljednji upit davat e ovakav rezultat: {"err" : , "updatedExisting" : true , "n" : 1 , "ok" : 1} // Alternativno, ukoliko je neki od operatora pogodan za izmjenu atributa, mogue je koristiti findAndModify koji navedenu metodu integrira unutar jednog upita: db.stanjeArtikala.update({sifra : "123"}, {$inc: {{ kolicina : 1 } }}) // Ovdje koristimo operator $inc koji pribraja/oduzima broj u argumentu (u ovome sluaju pribraja 1)
Jedan od alternativnih naina je upotreba dodatnog atributa za praenje verzija. Kod svake izmjene dokumenta atribut verzija se poveava za jedan. Nakon lokalne izmjene dokumenta, kod upita za njegovu izmjenu u zbirci, uz jedinstveni klju koji odreuje dokument dodaje se i parametar verzija koji osigurava da se dokument u meuvremenu nije promijenio (verzija bi se poveala za broj izmjena obavljenih u vremenu proteklom od dohvata lokalnog dokumenta).
3.7. Replikacija
Replikacija je stvaranje kopija baza podataka na dva ili vie posluitelja kako bi se poveala pouzdanost pristupanja i otpornost sustava na pogreke. Ako doe do kvara na jednom posluitelju, drugi posluitelj na koji su se replicirali podaci moe preuzeti ulogu prvog posluitelja i rad s bazom podataka se nastavlja bez pogreke. MongoDB omoguuje dvije vrste replikacija: nadreeni-podreeni (engl. masterslave) i skupovi replika (engl. replica sets) replikaciju. Nadreeni-podreeni replikacija je uobiajeni nain replikacije podataka podran u veini tradicionalnih relacijskih SUBP-ova, gdje jedan posluitelj prima zahtjeve za itanje i zapisivanje
27
DODATAK B
podataka (nadreeni), te se ti podaci tada repliciraju na sve podreene posluitelje koji se mogu koristiti za itanje podataka. U sluaju kvara nadreenog posluitelja, rad se moe nastaviti sa samo jednim od podreenih posluitelja. Da bi se vratio nadreeni posluitelj, on se mora prvo uskladiti s podacima privremenog podreenog posluitelja kako bi mogao nastaviti s radom kao nadreeni posluitelj.
Stanje prije kvara nadreenog Stanje poslije kvara nadreenog
Nadreeni
Podreeni 1
Nadreeni
Podreeni 3
Podreeni 1
Podreeni 2
Podreeni 3
Slika 9. Proces nakon kvara nadreenog posluitelja kod replikacije nadreenipodreeni Replikacija skupovima, za razliku od nadreeni-podreeni replikacije, unaprijed ne odreuje koji je posluitelj nadreeni. Ukoliko doe do kvara na nadreenom posluitelju, jedan od preostalih spremnih podreenih posluitelja unutar istog skupa replika automatski preuzima ulogu nadreenog posluitelja. Kada se posluitelj koji je bio u kvaru natrag vraa u skup replika, prvo se pokuava sinkronizirati s ostalim posluiteljima kako bi uskladio podatke i tada on radi kao jedan od podreenih posluitelja u skupu replika dok uloga nadreenog ostaje onome koju ju je preuzeo tijekom kvara.
28
DODATAK B
Stanje prije kvara nadreenog Stanje nakon kvara nadreenog
Nadreeni
Replika
Slika 10. Proces oporavka kvara nadreenog kod skupa replika Dodatna prednost replikacije je i poveanje performansi sustava koji imaju velik broj zahtjeva za itanjem iz baze podataka. Tada se itanja mogu raspodijeliti na sve podreene posluitelje, no to je mogue samo u sluaju kada konzistentnost podataka nije bitna s obzirom da podaci na podreenim posluiteljima ne moraju biti jednaki podacima na nadreenom posluitelju. Podaci izmeu nadreenog posluitelja i ostalih podreenih posluitelja mogu kasniti ako je replikacija asinkrona, tj. nadreeni posluitelj ne eka na potvrdu podreenih posluitelja da
29
DODATAK B
su se podaci zaista zapisali na njih. Zbog pada performansi kod sinkrone replikacije, uglavnom se koristi asinkrona replikacija.
DODATAK B
Konfiguracijski posluitelj
Aplikacijski posluitelj
Slika 11. Komponente MongoDB sustava s podjelom na odlomke Podaci se na odlomke dijele prema kljuu koji se zadaje SUBP-u. Vrlo je bitno odabrati pogodan klju kako bi se podaci mogli dijeliti jer ukoliko klju ne nudi dovoljnu rasprenost podaci e se grupirati u prevelike grupe koje se nee moi seliti izmeu posluitelja. Npr. dobar klju bi se sastojao od 2 podatka: OIB i _id. OIB omoguuje da se svi podaci jednog korisnika nalaze na im manje razliitih odlomaka, to je pogodno kod itanja jer se upit prosljeuje manjem broju odlomaka. "_id" osigurava da se podaci dijele ako koliina podataka jednog korisnika prelazi veliinu odlomka.
31
DODATAK B
Borba Avatar PK FK1 ID IDKorisnika Ime BrojPobjeda BrojPoraza FK1 FK2 FK3 FK4 IDKorisnik1 IDKorisnik2 IDAvatar1 IDAvatar2 Bodova1 Bodova2 Pobjednik Gubitnik PK ID
Slika 12. Struktura podataka ogledne aplikacije Ogledna aplikacija se sastoji od Korisnika, odreenog broja Avatara koje svaki korisnik posjeduje i Borbi, koje su rezultat borbe dva Avatara. Struktura aplikacije zamiljena je tako da bude slina strukturi igara na Internetu kod kojih postoji velik
32
DODATAK B
broj korisnika i velik broj akcija koje ti korisnici mogu istovremeno generirati (posebice kod igara povezanim s socijalnim mreama [7]). Slika 12 prikazuje strukturu podataka koja nije idealna, jer se pojavljuju redundantni podaci: broj poraza i pobjeda kod korisnika i avatara, te IDKorisnik kod borbi. Rezultat je to optimizacije da se postigne vea brzina dohvata podataka jer nee biti potrebe za spajanjima.
4.4. Testiranje
Testiranje se odvijalo tako da se na jednom voru pokretala aplikacija u dvije dretve i mjerilo vrijeme: stvaranja odreenog broja korisnika s sluajno generiranim imenima i odreenog broja avatara (takoer s sluajnom generiranim imenima) pridruenih tim korisnicima sluajnog odabir dva avatara bilo koja dva korisnika i simulacija borbe, te spremanje rezultata te borbe u zasebnu relaciju Borbe, uz istodobnu izmjenu broj pobjeda i poraza kod korisnika. Simulacija borbe sastoji se od generiranja sluajnih brojeva kako bi se troilo im manje vremena i utjecalo na ishod testa. dohvaanje statistike:
33
DODATAK B
o korisnik s najvie pobjeda o sortirani popis korisnika s najboljim omjerom pobjeda i poraza o sortirani popis avatara s najboljim omjerom pobjeda i poraza ukupno vrijeme svih navedenih operacija obje dretve
Broj korisnika, broj avatara po korisniku i broj borbi parametri su koji su se poveavali s svakim testiranjem kako bi se dobile razlike u performansama ovisne o koliini podataka.
Slika 13. Usporedba trajanja unosa korisnika i avatara MongoDB je u prosjeku 52% bri u svakoj iteraciji od MySql-a. Razlog tome je to MongoDB ne zapisuje sve podatke odmah na tvrdi disk posluitelja, ve se podaci prvo spremaju u radnu memoriju, klijent odmah dobiva potvrdu o tome da su podaci spremljeni, dok oni zapravo ekaju u redu za zapisivanje.
34
DODATAK B
Drugi dio testa sastoji se od simuliranja borbi izmeu sluajno odabranih avatara. Nakon simulacije borbe sprema se rezultat i osvjeavaju brojai pobjeda i poraza kod korisnika i avatara.
Slika 14. Usporedba simulacije borbi za razliitu koliinu korisnika Nakon 10000 korisnika MongoDB se znatno usporio. Do toga je dolo zbog nedostatka radne memorije na testnim raunalima. MongoDB smjeta kompletnu bazu podataka u radnu memoriju i kada ona naraste preko koliine dostupne radne memorije poinje stranienje radne memorije na tvrdi disk (engl. memory paging). Performanse u tom sluaju padaju za dva puta u usporedbi s oekivanim performansama. Trei dio testa sastoji se od dohvata i analiziranja podataka o korisnicima, avatarima i borbama.
35
DODATAK B
Slika 15. Usporedba trajanja operacija dohvata statistike korisnika, avatara i borbi Kod MongoDB-a te operacije izvedene su MapReduce i Finalize funkcijama, a kod MySqla standardnim SQL naredbama. MySql je u ovim operacijama daleko bri ve i na manjem broju zapisa, a ta razlika u brzini jo se vie naglaava porastom koliine podataka i njihovim dijeljenjem na odlomke na vie posluitelja. Programski kod koriten za dobivanje navedenih rezultata nalazi se u sljedeoj tabeli:
Dohvat korisnika sortiranih po odnosu pobjeda/poraz upotrebom Map, Reduce i Finalize funkcija Map funkcija
function() { emit(this.ime, { pobjeda : this.brojPobjeda, poraza : this.brojPoraza}); }
Reduce funkcija
function(ime, values ) { var n = { pobjeda:0, poraza:0 }; for ( var i = 0; i < values.length; i ++ ) { n.pobjeda += values[i].pobjeda; n.poraza += values[i].poraza; } return n; } 36
DODATAK B
Finalize funkcija
function(ime, value) { value.wl = value.pobjeda / value.poraza; return value; }
Ekvivalentni SQL upit SELECT ime, broj_pobjeda / broj_poraza FROM korisnici WHERE broj_poraza != 0 ORDER BY 2 Poziv SQL upita u Java programskom kodu
Connection conn = ConnectionPool.getConnection(); /* * Izvravanje SQL upita */ PreparedStatement stmtRead = conn.prepareStatement(SQLUpit); /* * Dohvat kursora s kojim se kree po dobivenim rezultatima */ ResultSet result = stmtRead.executeQuery();
37
DODATAK B
5. Zakljuak
NoSQL SUBP-ovi donose mnoge prednosti i inovacije u usporedbi s tradicionalnim relacijskim SUBP-ovima na podruju horizontalne skalabilnosti, replikacije podataka i rada s podacima bez unaprijed odreene sheme. Iako su prednosti znaajne, one ipak donose i nedostatke: skup ACID obiljeja koji je prisutan kod tradicionalnih relacijskih SUBP-ova i neophodan u mnogim primjenama, zamijenjen je BASE skupom obiljeja. Za kvalitetan odabir izmeu NoSQL SUBP-a i tradicionalnog relacijskog SUBP-a potrebno je dobro poznavati razlike ACID i BASE svojstava i kako one utjeu na rad s podacima. Kod odabira treba razmotriti i injenicu da veina NoSQL SUBP-ova postoji tek nekoliko godina u usporedbi s tradicionalnim relacijskim SUBP-ovima koji postoje ve nekoliko desetljea i koji su dokazali svoju stabilnost i kvalitetu. Nesumnjivo je da NoSql SUBP-ovi nisu prolazan trend i da e svoju primjenu nai u mnogim raspodijeljenim sustavima i programskim rjeenjima u oblacima. Dodajmo na kraju kako se ne radi nuno o izboru jedne ili druge tehnologije: relacijske baze podataka i NoSQL baze podataka se u sloenijim sustavim mogu kombinirati (nadopunjavati) kako bi se ostvarila optimalna rjeenja za pojedine zadae odnosno dijelove sustava.
38
DODATAK B
6. Literatura
1. Peschka, Jeremiah: Top 5 Reasons to use NoSql, http://facility9.com/2010/09/five-reasons-touse-nosql/, 22.4.2012. 2. Ruflin, Nicolas: Storing and Analyzing Social Data, Master thesis, University of Basel, pp. 1-48, 2010. 3. Kyle Banker, MongoDB in Action , Manning Publications Co, New York, 2012. 4. Couchbase: Data Management for Social and Online Games, 2012. 5. Strauch, Christof: NoSQL Databases, Hochschule der Medien, Stuttgart, 2011. 6. Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach,Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber: Bigtable: A Distributed Storage System for Structured Dana, OSDI, Seattle, WA, 2006. 7. Inside Social Games, Top 25 Facebook Games of March 2012, http://www.insidesocialgames.com/2012/03/01/top-25-facebook-games-of-march-2012, 30.5.2012
39