Pređi na sadržaj

NoSQL

S Vikipedije, slobodne enciklopedije

NoSQL (originalno se odnosi na "non-SQL" ili "nerelacioni")[1] predstavlja pristup dizajnu baza podataka, koji se fokusira na pružanje mehanizma za skladištenje i preuzimanje podataka koji su modelirani na načine koji nisu tabelarne relacije koje se koriste u relacionim bazama podataka. Umesto tipične tabelarne strukture relacione baze podataka, NoSQL baze podataka čuvaju podatke unutar jedne strukture podataka. Budući da ovaj dizajn baze podataka bez relacija ne zahteva šemu, pruža brzu skalabilnost za upravljanje velikim i obično neuređenim skupovima podataka.[2] NoSQL sistemi se ponekad nazivaju i "Not only SQL", kako bi se naglasilo da mogu podržavati jezike upita slične SQL-u ili postojati uz SQL baze podataka u poliglota-persistantnim arhitekturama.[3]

Nerelacione baze podataka postoje od kraja 1960-ih godina, ali naziv "NoSQL" je skovan tek početkom 21. veka, podstaknut potrebama kompanija koje koriste Web 2.0 tehnologije. [4] NoSQL baze podataka se sve više koriste u oblasti velikih podataka i realno-vremenskih veb aplikacija.[5]

Motivacije za ovaj pristup uključuju jednostavnost dizajna, lakše "horizontalno" skaliranje ka klasterima mašina (što predstavlja problem za relacione baze podataka), precizniju kontrolu dostupnosti i smanjenje nesklada između objektno-relacionog modela podataka.[6] Strukture podataka koje koriste NoSQL baze podataka razlikuju se od onih koje se podrazumevano koriste u relacionim bazama podataka, čime se neke operacije izvršavaju brže u NoSQL. Ponekad se strukture podataka koje koriste NoSQL baze podataka smatraju "fleksibilnijim" u poređenju sa tabelama relacionih baza podataka.[7]

Većina NoSQL baza podataka ne podržava prave ACID transakcije, iako su neki sistemi učinili da budu centralni deo svojih dizajna. Umesto toga, većina NoSQL baza podataka nudi koncept "eventualne doslednosti", gde se promene u bazi podataka postepeno šire ka svim čvorovima "konačno" (obično u roku od nekoliko milisekundi). Zbog toga upiti za podatke možda neće odmah vratiti ažurirane podatke ili mogu rezultirati čitanjem podataka koji nisu tačni, što predstavlja problem poznat kao "zastarelo čitanje".[8] Dodatno, neki NoSQL sistemi mogu pokazivati gubitke upisa i druge oblike gubitka podataka, stoga ovi sistemi uvode koncepte poput unaprednog beleženja kako bi se izbegao gubitak podataka.

Istorija[uredi | uredi izvor]

Izraz NoSQL je korišćen od strane Karla Strozzija 1998. godine kako bi nazvao svoju laganu Strozzi NoSQL open-source relacionu bazu podataka koja nije koristila standardni jezik upita (SQL), ali je i dalje bila relaciona.[9] Njegov NoSQL RDBMS se razlikuje od opšteg koncepta NoSQL baza podataka koji je nastao oko 2009. godine. Strozzi predlaže da bi, budući da se trenutni NoSQL pokret "potpuno odvaja od relacionog modela, stoga bi ga bilo prikladnije nazvati "NoREL",[10] što se odnosi na "nije relaciona".

Johan Oskarsson, tada programer u Last.fm, ponovo je uveo izraz NoSQL početkom 2009. godine kada je organizovao događaj da se razgovara o "otvorenim distribuiranim, nerelacionim bazama podataka".[11] Naziv je pokušao označiti pojavu sve većeg broja nerelacionih, distribuiranih skladišta podataka, uključujući otvorene kopije Google-ovog Bigtable/MapReduce i Amazon-ovog DynamoDB.

Vrste i primeri[uredi | uredi izvor]

Postoje različiti načini klasifikacije NoSQL baza podataka, sa različitim kategorijama i podkategorijama, od kojih se neke preklapaju. U nastavku sledi pregled klasifikacije prema modelu podataka, sa primerima:[12]

Tip baze podataka Značajni primer svakog tipa baze podataka
Skladište dokumenata Azure Cosmos DB, ArangoDB, BaseX, Clusterpoint, Couchbase, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, RavenDB, Qizx, RethinkDB, Elasticsearch, OrientDB
Grafička baza podataka Azure Cosmos DB, AllegroGraph, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, Neo4J, OrientDB, Virtuoso
Ključ–vrednost keš Apache Ignite, Couchbase, Coherence, eXtreme Scale, Hazelcast, nfinispan, Memcached, Redis, Velocity
Ključ–vrednosno skladište Azure Cosmos DB, ArangoDB, Amazon DynamoDB, Aerospike, Couchbase, ScyllaDB
Ključ–vrednosno skladište (doslednost na kraju) Azure Cosmos DB, Oracle NoSQL Database, Riak, Voldemort
Ključ–vrednosno skladište (uređeno) FoundationDB, InfinityDB, LMDB, MemcacheDB
Multivrednosna baza podataka D3 Pick database, Extensible Storage Engine (ESE/NT), InfinityDB, InterSystems Caché, jBASE Pick database, mvBase Rocket Software, Northgate Information Solutions Reality (the original Pick/MV Database), OpenQM, Revelation Software's OpenInsight (Windows) and Advanced Revelation (DOS), UniData Rocket U2, UniVerse Rocket U2
Baza podataka sa prirodnim podržavanjem više modela ArangoDB, Azure Cosmos DB, OrientDB, MarkLogic, Apache Ignite, Couchbase, FoundationDB, Oracle Database
Objektna baza podataka Objectivity/DB, Perst, ZODB, db4o, GemStone/S,InterSystems Caché, JADE, ObjectDatabase++, ObjectDB, ObjectStore, ODABA, Realm, OpenLink Virtuoso, Versant Object Database
Trostruko skladište (Trostruka baza podataka) AllegroGraph, MarkLogic, Ontotext-OWLIM, Oracle NoSQL database, Profium Sense, Virtuoso Universal Server
Skladište torki (Baza podataka sa torkama) Apache River, GigaSpaces, T-arantool, TIBCO ActiveSpaces, OpenLink Virtuoso
Širokolonsko skladište Azure Cosmos DB, Amazon DynamoDB, Bigtable, Cassandra, Google Cloud Datastore, HBase, Hypertable, ScyllaDB

Baza podataka ključ–vrednost[uredi | uredi izvor]

Baze podataka ključ–vrednost (KV) koriste asocijativno polje (takođe nazvano mapa ili rečnik) kao svoj osnovni model podataka. U ovom modelu, podaci su predstavljeni kao kolekcija parova ključ–vrednost, tako da se svaki mogući ključ pojavi najviše jednom u kolekciji.[13]

Model ključ–vrednost je jedan od najjednostavnijih, ali ne i trivijalnih modela podataka, a bogatiji modeli podataka često su implementirani kao proširenje ovog modela. Model ključ–vrednost može biti proširen na model sa diskretnim redosledom koji održava ključeve leksikografski poređane. Ovo proširenje je računarski snažno, jer može efikasno dohvatiti selektivne opsege ključeva.[14]

Baze podataka ključ–vrednost mogu koristiti modele doslednosti od eventualne doslednosti do serializabilnosti. Neki sistemi podržavaju uređivanje ključeva. Postoje različite implementacije hardvera, a neki korisnici skladište podatke u memoriji (RAM), dok ih drugi smeštaju na čvrste diskove (SSD) ili rotirajuće diskove (poznate i kao hard drive (HDD)).

Baza podataka orijentisana na dokumente[uredi | uredi izvor]

Centralni koncept baze podataka orijentisane na dokumente je koncept "dokumenta". Iako se detalji ove definicije razlikuju među bazama podataka orijentisanim na dokumente, one sve pretpostavljaju da dokumenti inkapsuliraju i kodiraju podatke (ili informacije) u nekim standardnim formatima ili enkodinzima. Upotrebljavani enkodinzi uključuju XML, YAML i JSON, kao i binarni oblici poput BSON-a. Dokumenti se adresiraju u bazi podataka putem jedinstvenog ključa koji predstavlja taj dokument. Još jedna definirajuća karakteristika baze podataka orijentisane na dokumente je API ili jezik upita za dohvatanje dokumenata na osnovu njihovog sadržaja.

Različite implementacije nude različite načine organizovanja ili grupisanja dokumenata:

  • Kolekcije,
  • Oznake,
  • Nevidljivi metapodaci,
  • Direktorske hijerarhije.

U poređenju sa relacionim bazama podataka, kolekcije se mogu smatrati analogijom tabelama, a dokumenti analogijom zapisima. Međutim, one su različite - svaki zapis u tabeli ima isti sled polja, dok dokumenti u kolekciji mogu imati potpuno različita polja.

Grafička baza podataka[uredi | uredi izvor]

Grafičke baze podataka su dizajnirane za podatke čiji odnosi dobro mogu biti predstavljeni kao graf koji se sastoji od elemenata povezanih konačnim brojem veza. Primeri ovakvih podataka obuhvataju društvene odnose, veze u javnom prevozu, putne mape, topologije mreža, itd.

Performanse[uredi | uredi izvor]

Performanse NoSQL baza podataka obično se procenjuju pomoću metrike propusnosti, koja se meri kao operacije u sekundi. Evaluacija performansi mora obratiti pažnju na odgovarajuće kriterijume kao što su konfiguracije u produkciji, parametri baza podataka, očekivani obim podataka i radna opterećenja korisnika u isto vreme.

Ben Skofild je ocenio različite kategorije NoSQL baza podataka na sledeći način:[15]

Model podataka Performanse Prilagodljivost Fleksibilnost Složenost Funkcionalnost
Skladište orijentisano po kolonama Visoko Visoko Umereno Nisko Minimalno
Skladište orijentisano prema dokumentima Visoko Promenljivo (visoko) Visoko Nisko Promenljivo (nisko)
Grafička baza podataka Promenljivo Promenljivo Visoko Visoko Teorija grafova
Ključ–vrednosno skladište Visoko Visoko Visoko Nema Promenljivo (nema)
Relaciona baza podataka Promenljivo Promenljivo Nisko Umereno Relacione algebre

Poređenje performansi i skalabilnosti najčešće se vrši korišćenjem YCSB benčmarka.

Rukovanje relacionim podacima[uredi | uredi izvor]

Pošto većina NoSQL baza podataka nema mogućnost za spajanje u upitima, šema baze podataka se obično mora dizajnirati na drugačiji način. Postoje tri glavne tehnike za rukovanje relacionim podacima u NoSQL bazi podataka.

Višestruki upiti[uredi | uredi izvor]

Umesto da se svi podaci dobiju jednim upitom, uobičajeno je izvršiti nekoliko upita kako bi se dobili željeni podaci. NoSQL upiti često su brži od tradicionalnih SQL upita, pa je trošak dodatnih upita možda prihvatljiv. Ako bi bilo potrebno izvršiti prekomerni broj upita, jedan od preostala dva pristupa bio bi pogodniji.

Keširanje, replikacija i nedenormalizovani podaci[uredi | uredi izvor]

Umesto samo čuvanja stranih ključeva, uobičajeno je čuvati stvarne vrednosti stranih ključeva zajedno sa podacima modela. Na primer, svaki komentar na blogu može uključivati korisničko ime pored identifikatora korisnika, čime se omogućava lako pristupanje korisničkom imenu bez dodatnog pretraživanja. Međutim, kada se korisničko ime promeni, sada će biti potrebno promeniti ga na mnogo mesta u bazi podataka. Ovaj pristup bolje funkcioniše kada su čitanja mnogo češća od pisanja.[16]

Ugnježdeni podaci[uredi | uredi izvor]

Sa dokument bazama podataka poput MongoDB-a, uobičajeno je smeštati više podataka u manji broj kolekcija. Na primer, u aplikaciji za blogovanje, može se odlučiti da se komentari čuvaju unutar dokumenta blog posta, tako da se jednim dohvatanjem dobiju svi komentari. Dakle, u ovom pristupu jedan dokument sadrži sve podatke potrebne za određeni zadatak.

Reference[uredi | uredi izvor]

  1. ^ „NoSQL Databases List by Hosting Data - Updated 2023”. Hosting Data (na jeziku: engleski). 2023-11-17. Pristupljeno 2023-12-09. 
  2. ^ „Topics | IBM”. www.ibm.com (na jeziku: engleski). Pristupljeno 2023-12-09. 
  3. ^ 3. New Requirements, “Not only SQL” and the Cloud, De Gruyter, 2015-10-16, str. 33—40, Pristupljeno 2023-12-09 
  4. ^ Back Matter, Princeton University Press, str. 647—648, Pristupljeno 2023-12-09 
  5. ^ Fellner, Andrew; Fischer, Steffen (2013-11-08). „Energy Efficient Hydraulic Systems for Large Engines”. Day 1 Fri, November 08, 2013. SNAME. doi:10.5957/smc-2013-p22. 
  6. ^ Sadalage, Pramod J.; Fowler, Martin (2013). NoSQL distilled: a brief guide to the emerging world of polyglot persistence. Always learning. Upper Saddle River, NJ Munich: Addison-Wesley. ISBN 978-0-321-82662-6. 
  7. ^ Sivasubramanian, Swaminathan (2012-05-20). „Amazon dynamoDB”. Proceedings of the 2012 ACM SIGMOD International Conference on Management of Data. New York, NY, USA: ACM. doi:10.1145/2213836.2213945. 
  8. ^ Fowler, Dennis Houston, (15 March 1924–20 April 2015), HM Diplomatic Service, retired, Oxford University Press, 2007-12-01, Pristupljeno 2023-12-09 
  9. ^ Saeedi, Alieh; Nentwig, Markus; Peukert, Eric; Rahm, Erhard (2018-10-31). „Scalable Matching and Clustering of Entities with FAMER”. Complex Systems Informatics and Modeling Quarterly (16): 61—83. ISSN 2255-9922. doi:10.7250/csimq.2018-16.04. 
  10. ^ NoSQL Database Phenomenon, IGI Global, 2018, str. 34—93, Pristupljeno 2023-12-09 
  11. ^ „Fig. 2. Examples of color anomalies on the ORO images, time points of the survey: a - March 13, 2010; B - November 20, 2009; on July 12, 2010; d - May 3, 2012 (TKO Dmitrovsky test site, images from Google Earth).”. dx.doi.org. Pristupljeno 2023-12-09. 
  12. ^ Celko, Joe (2014), Graph Databases, Elsevier, str. 27—46, Pristupljeno 2023-12-09 
  13. ^ Haeusler, Martin (2016). „Scalable Versioning for Key-Value Stores”. Proceedings of the 5th International Conference on Data Management Technologies and Applications. SCITEPRESS - Science and Technology Publications. doi:10.5220/0005938700790086. 
  14. ^ Katsov, Ilya (2022-10-17). „Building Next Best Action Engines for B2C and B2B Use Cases”. Proceedings of the 31st ACM International Conference on Information & Knowledge Management. New York, NY, USA: ACM. doi:10.1145/3511808.3557511. 
  15. ^ Integration of Relational and NoSQL Databases, IGI Global, 2018, str. 239—281, Pristupljeno 2023-12-09 
  16. ^ Bromham, Lindell; Cardillo, Marcel (2019-05-02), How did evolution get started?, Oxford University Press, ISBN 978-0-19-960871-3, Pristupljeno 2023-12-09