NoSQL

Tutorijal-praktikum za fleksibilne modele podataka, dokument baze, key-value sisteme, graf baze i skaliranje
NoSQL – uvod u dokument baze, key-value sisteme, kolonske baze, graf baze i skaliranje podataka
Uvod

NoSQL baze podataka počinju od jednog važnog pitanja: šta radimo kada klasična tabela više nije najzgodniji oblik za podatke koje želimo da čuvamo? Relacione baze ostaju izuzetno važne, posebno tamo gde su podaci strogo strukturirani, povezani pravilima i zahtevaju jasnu doslednost. Ali savremene aplikacije često rade sa podacima koji su raznovrsni, promenljivi, veliki, brzo rastu i moraju da budu dostupni velikom broju korisnika.

Ovaj tutorijal-praktikum namenjen je svima koji žele da razumeju NoSQL svet bez mistifikacije. Namenjen je početnicima koji su tek upoznali baze podataka, ali i onima koji već znaju osnove SQL-a i žele da shvate zašto postoje dokument baze, key-value sistemi, kolonske baze i graf baze. Cilj nije da jednu vrstu baze proglasimo boljom od druge, već da naučimo kada koji alat ima smisla.

NoSQL nije jedna jedina tehnologija, već porodica različitih pristupa čuvanju podataka. U nekim sistemima podaci se čuvaju kao dokumenti slični JSON zapisu. U drugim sistemima sve se svodi na par ključ–vrednost. Negde se podaci organizuju u široke kolonske strukture pogodne za velike distribuirane sisteme, a negde se najvažnijim smatraju veze između podataka, pa se koristi graf model.

U prvom delu praktikuma upoznajemo razloge nastanka NoSQL baza. Videćemo kako su web aplikacije, društvene mreže, mobilni sistemi, veliki logovi, metrike, poruke, korisnički profili i preporuke otvorili potrebe koje se ne rešavaju uvek najlakše klasičnim relacionim modelom. Naučićemo da NoSQL često polazi od pitanja: kako će aplikacija najčešće koristiti ove podatke?

Jedna od važnih osobina NoSQL sistema jeste fleksibilna šema. To znači da struktura podataka ne mora uvek biti strogo zaključana unapred. Kod dokument baza, na primer, jedan dokument može imati jedno polje više, drugi jedno polje manje, a treći ugnježdene podatke koji prirodno pripadaju istom objektu. Takva fleksibilnost može biti veoma korisna, ali zahteva disciplinu i dobar dizajn.

Posebnu pažnju posvetićemo dokument bazama. One su bliske načinu na koji aplikacije često već predstavljaju podatke: kao objekte, profile, porudžbine, podešavanja ili zapise sa ugnježdenim detaljima. Kroz osnovne pojmove kao što su kolekcija, dokument, polje i ugnježdeni podatak videćemo zašto je dokument model popularan u razvoju savremenih aplikacija.

Zatim prelazimo na key-value baze, najjednostavniji oblik NoSQL razmišljanja. Podatak se dobija preko ključa, a vrednost može predstavljati tekst, broj, strukturu, token, sesiju ili privremeno stanje aplikacije. Ovakvi sistemi su naročito korisni za keširanje, brojanje, rad sa sesijama, redovima poruka i brze operacije kod kojih je direktan pristup važniji od složenog pretraživanja.

Kolonske baze uvode nas u svet velikih distribuiranih sistema. One su pogodne za scenarije u kojima se prikuplja mnogo zapisa, često kroz vreme: logovi, metrike, događaji, senzorski podaci i slični tokovi informacija. U ovom delu učićemo šta znači wide-column model, kako se podaci raspoređuju kroz više čvorova i zašto se kod ovakvih baza unapred razmišlja o obrascima čitanja.

Graf baze pokazuju da ponekad nisu najvažniji ni redovi, ni kolone, ni dokumenti, već odnosi. Kada želimo da razumemo preporuke, društvene mreže, zavisnosti između sistema, veze između korisnika, proizvoda, lokacija ili pojmova, graf model postaje izuzetno prirodan. Čvorovi i veze omogućavaju da postavljamo pitanja koja bi u klasičnim tabelama često zahtevala veliki broj spajanja.

U drugom delu praktikuma bavimo se skaliranjem, replikacijom, shardingom i konzistentnošću. NoSQL sistemi često se koriste zato što mogu da rade kroz više servera i da podnose velike količine čitanja i pisanja. Ali distribucija donosi i nove izazove: šta znači imati više kopija podataka, šta se dešava kada deo mreže nije dostupan i zašto se ponekad prihvata eventualna konzistentnost.

Važno je razumeti da NoSQL ne ukida potrebu za dobrim modelovanjem. Naprotiv, zato što je šema fleksibilnija, odgovornost projektanta često postaje još veća. Potrebno je znati koje podatke držati zajedno, koje razdvojiti, šta će se često čitati, šta će se često menjati i gde se može pojaviti nedoslednost. Sloboda bez razmišljanja lako postaje haos.

Na kraju, cilj ovog tutorijala nije samo da naučimo nazive različitih NoSQL baza. Cilj je da steknemo osećaj za izbor tehnologije prema problemu. Nekada je najbolji izbor relaciona baza. Nekada dokument baza. Nekada Redis za keširanje. Nekada graf baza za odnose. A u ozbiljnim sistemima često se koristi više modela zajedno. Kada razumemo prednosti i granice svakog pristupa, podaci prestaju da budu zbrka i postaju promišljena arhitektura.

Povratak na sadržaj Sledeća lekcija →