Abstract | Potreba za spremanjem, kategorizacijom i pretraživanjem podataka stara je gotovo koliko i samo čovječanstvo. Iako su se promijenili načini pohrane i obrade podataka, glavni problemi rukovanja podacima ostali su isti. Smanjenje financijskog troška čuvanja podataka, brzo i pregledno čitanje podataka, lako održavanje i konzistentnost, samo su neki od konstantnih izazova s kojima se susreću arhitekti baza podataka. Razvojem računala i pojavom relacijskih baza podataka u 70-im godinama, činilo se da su svi problemi riješeni, no popularizacijom Interneta javili su se i novi tehnološki izazovi. Količina podataka povećala se eksponencijalnom brzinom, a uniformna struktura informacija se počela gubiti. Postalo je jasno da globalno popularan relacijski model u određenom broju slučajeva više nije dovoljno dobar. Velike online trgovine, društvene mreže i web tražilice bile su suočene s velikim problemom, koji je rastao iz dana u dan. Te su kompanije odlučile uzeti stvari u svoje ruke i započele su NoSQL pokret. Općeprihvaćena formalna definicija NoSQL sustava još uvijek ne postoji, no možemo je shvatiti kao skup principa arhitekture baza podataka koji odmiču od centraliziranog, strogo definiranog relacijskog modela i SQL upita. Osnovna svojstva takvih baza su brzina, koju omogućuje horizontalno skaliranje operacija, visoka tolerancija na veličinu baze, zbog fragmentacije podataka na klastere, te prilagodljivost, zahvaljujući izostanku definicije sheme podataka. Budući da je svaka kompanija razvijala model podataka koji bi savršeno odgovarao njezinim potrebama, danas poznajemo mnogo implementacija NoSQL sustava. Neki od najpopularnijih modela podataka implementiranih u ovim sustavima su: ključ--vrijednost, graf, dokument i stupčane baze podataka. Cilj rada je detaljno objasniti spomenute principe i predstaviti sve gore navedene tipove NoSQL sustava. Rad će pokazati primjere implementacije i primjene za svakoga od njih, te izložiti njihove prednosti i nedostatke u odnosu na relacijske baze. Rad ne želi predložiti napuštanje relacijskih baza podataka, nego osvjestiti čitatelja da jedan model baze ne može odgovarati svakoj aplikaciji. Zato želimo pomoći u donošenju informirane odluke pri odabiru sustava na kojem će se temeljiti aplikacija. |
Abstract (english) | The need for storing and manipulating data is about as old as the humanity itself. Although the way the data is stored and manipulated has changed a lot through the years, the main problems stayed the same. Lowering the cost of storing data, ease and speed of searching through big amounts of data, maintainability and consistency, are just a few constant challenges in the work of database architects. As computers evolved and relational databases appeared in the 70's, it seemed all problems are solved, but after the Internet bloomed, new challenges emerged. The amount of data on the Internet grew exponentially fast and the uniformity of data began to fade out. It became clear that the globally popular relational model is just not good enough in some cases. Big online shops, social networks and web search companies found themselves facing a big problem that was growing day by day. Those companies took the matter into their own hands and started the NoSQL movement. Although a formal definition of NoSQL systems is still missing, we can think of it as a set of principles that look away from the centralized, strictly defined relational model and SQL queries. Main characteristics of such systems are speed, which is increased by using horizontal scaling of operations, high tolerance to database size, due to fragmentation of data on many clusters, and agility, thanks to the leftout definition of database schema. Since each company developed a model to fit their needs perfectly, today we know a lot of different implementations of NoSQL systems. Some of the most popular data models implemented are: key--value, graph, document and column databases. This thesis aims to explain into detail the principles of NoSQL systems and to introduce popular data models mentioned above. We will show examples of implementation and usage for each of them. The goal is not to suggest that we have to discard relational databases, but rather to accept that one database model cannot fit all software. This is why we aim to help in making an informed decision on which system will be used in development of a particular application. |