NoSQL - kas tai?
Nors terminas NoSQL, pirmą kartą buvo „sukurtas“ dar 1998 metais, kuomet Carlo Strozzi [1] pavadino savo sukurtą atviro kodo, duomenų bazių valdymo sistemą, kuri buvo be SQL sąsajos. Tačiau NoSQL kaip terminas plačiau vartoti imtas tik nuo 2009 metų, kuomet vienas kompanijos rackspace darbuotojų Eric Evans organizavo renginį/atvirą diskusiją tema skirta atviro kodo paskirstytų sistemų duomenų bazėms (angl. open-source distributed databases), kurią pavadino „nosqleast“.
Konferencijoje žodzių darinys „nosql“ buvo dar kartą pavartotas ir tapo tam tikra fraze apibūdinančia, ne reliacines, paskirstytas duomenų bazių valdymo sistemas. Po šios konferencijos „NoSOL“ įgavo pagreitį ir ėmė plisti bei tobulėti, kaip technologija skirta konkuruoti su reliacinėmis duomenų bazėmis [2]. Pats Eric Evans teigė jog dabar, jis labai gailisi kad taip pavadino, buvo bandoma siūlyti kitą pavadinimą kaip, kad „Big Data“ tačiau kaip paplitusi frazė (angl. buzzword) vis tik išliko terminas „NoSQL“. „NoSQL“ galime iššifruoti kaip „not only SQL“ aprėpiantį skirtingas ne reliacines duomenų bazių technologijas.

CAP Teorema
Berklio universiteto (angl. University of California, Berkeley) mokslininkas Eric Brewer paskelbė teoremą, pavadinta CAP teorema [3] (dar žinoma kaip Brewerio teorema (angl. Brewer‘s theorem)), kuri teigia jog programų sistemai neįmanoma vienu metu teikti šių garantijų:
- Consistency (C) - visi klientai visada mato vienodus duomenis.(Pavyzdžiui, po "update" operacijos, visi vartotojai mato atnaujintus duomenis.) Visos duomenų bazės kopijos turi tas pačias reikšmes tuo pačiu laiko momentu.
- Availability (A) - dalies mazgų gedimas nesutrikdo likusių mazgų darbo – klientai naudojasi pilnu funkcionalumu. Sistema visada pasiekiama, jokio prastovos laiko (angl. downtime). Kiekvienas kreipinys į duomenų bazę sulaukia atsakymo nepriklausomai nuo to ar jis pavyko ar ne.
- Partition Tolerance (P) - sistemos išskirstymo galimybė. Kiekviena išskirstyta dalis turi tuos pačius duomenis ir funkcionalumą. Sistema veikia toliau nepaisant dalinio sistemos lūžimo arba kažkokių infrastruktūrinių duomenų praradimo.
Ši teorema yra neatsiejama nuo paskirstytų sistemų kūrimo, taip pat ir NoSQL. Visos šiuo metu esamos NoSQL duomenų bazės yra paremtos šia teorema, bei kurtos panaudojant skirtingas CAP teoremos kombinacija (dvi iš trijų) CA, CP bei AP:
- CA (Consistency/Availability) - Naudojamas vienas klasteris(pvz. viskas vienoje virtualioje mašinoje), visi sistemos mazgai vienoje vietoje. Tačiau sugedus klasteriui prarandamas sistemos veikimas.
- CP (Consistency/Partition Tolerance) – Ne visi duomenys gali būti pasiekiami (sutrikus sistemos mazgų darbui), tačiau likę duomenys bus tikslūs ir visada atnaujinti.
- AP (Availability/Partition Tolerance) – Sistema paskirstyta į kelias dalis, kurios turi pilną sistemos funkcionalumą bei duomenis, tačiau duomenys ne visada gali būti tikslūs.(Pvz. atnaujinus reikšmę, ir perkrovus puslapį rodoma ankstesnė reikšmė, nes ne visos sistemos dalyse duomenys buvo susinchronizuoti).

NoSQL tipai
Šiuo metu yra keturi pagrindiniai duomenų saugojimo modeliai naudojami NoSQL duomenų bazių sprendimuose:
- Raktas-reikšmė (Key-value stores)
- Stulpeliais orientuota (Column-oriented)
- Grafo principu (Graph)
- Objektais orientuots (Document oriented)
Kiekvienas šių tipų yra skirtingas, turi savus privalumus bei trūkumus lyginant su kitais, tai gi vienintelio gero sprendimo, kurį duomenų saugojimo tipą naudoti nėra. Daug kas priklauso nuo kuriamos sistemos pobūdžio [5].
Raktas-reikšmė modelis (Key-value stores)

Šiame modelyje duomenys yra saugojami „hash“ tipo lentelėse, kurios kiekvienas įrašas turi unikalų raktą bei nuorodą į konkretų įrašą, kuris gali būti įvairaus formato „string“ tipo laukas, JSON (JavaScript Object Notation) tekstinis duomenų formatas, BLOB (basic large object) ar kt.
Raktas-reikšmė modelis yra pats paprasčiausias ir lengviausiai integruojamas sistemoje, tačiau nėra itin efektyvus jeigu reikalinga dažnai atnaujinti duomenis, arba yra dažnas poreikis duomenų skaitymui
Raktas-reikšmė modelis pagal CAP teorema remiasi „Availability“ bei „Partition Tolerence“ aspektais.
Keletas duomenų bazių, naudojančių šį modelį: Voldemort, Tokyo Cabinet, Redis, and Amazon Dynamo.
Stulpeliais orientuota (Column-oriented)

Šio tipo duomenų bazės modelis buvo sukurtas, tam jog būtų galima saugoti bei apdoroti didelį kiekį duomenų paskirstytų tarp keleto serverių. Modelyje taip pat naudojami raktai, kurie nurodo į duomenų stulpelius. Duomenys saugojami stulpeliuose, o ne eilutėse., užklausos vykdomos taip pat stulpelių lygmenyje. Tokio tipo duomenų bazės paplitusios tarp duomenų saugyklų, ryšių su klientais valdymo (CRM) sistemų, biblioteka kortelių katalogų ir t.t.[5]
Keletas duomenų bazių, naudojančių šį modelį: BigTable, Cassandra, SimpleDB
Grafo duomenų stuktūra (Graph)

Grafo duomenų stuktūra – tam tikrų objektų (viršūnių), sujungtų briaunomis ir/arba lankais, rinkinys [7].
Grafo duomenų bazės modelis – tai:
- Duomenų saugojimas grafo pavidalu
- Grafo duomenų bazė yra mazgų (angl. nodes) ir viršunių (angl. edges) rinkinys
- Kiekvienas mazgas atstovauja subjekto (angl. entity) vientisumą (pvz. studentas), o kiekviena viršūnė nurodo ryšį tarp dviejų mazgų.
- Kiekvienas mazgas ir viršūnė yra apibrėžti unikalaus identifikatoriaus.
- Kiekvienas mazgas žino savo kaimyninius mazgus.
- Indeksai naudojami paieškai
Keletas duomenų bazių, naudojančių šį modelį: Neo4J, InfoGrid, Infinite Graph
Klasikinės reliacinės duomenų bazės bei grafo bazės palyginimas [5]:
Relecinis modelis | Grafo modelis |
---|---|
Lentelės (Tables) | Vertices and Edges set |
Eilutės (Rows) | Viršūnės (Vertices) |
Stulpeliai (Columns) | Raktas-reikšmė poros (Key/value pairs) |
Jungimai (Joins) | Kraštai (Edges) |
Objektais orientuots (Document oriented)

Šio tipo duomenų bazės modelis panašus į prieš tai minėta raktas-reikšmė (angl. key-value stores) modelį. Kiekvienas dokumentas (objektas) duomenų bazėje turi unikalų raktą pagal kurį yra adresuojamas. Dokumentu (objektu) gali būti laikomas tiek XML , tiek JSON formatu saugomi duomenys. Šio tipo modelis turi geresni užklausų palaikymą.
Keletas duomenų bazių, naudojančių šį modelį butų: CouchDB, MongoDb
Klasikinės reliacinės duomenų bazės bei grafo bazės palyginimas [5]:
Relecinis modelis | Objekto (Document oriented) modelis |
---|---|
Lentelės (Tables) | Rinkiniai (Collections) |
Eilutės (Rows) | Objektai (Documents) |
Stulpeliai (Columns) | Raktas-reikšmė poros (Key/value pairs) |
Jungimai (Joins) | - |
NoSQL Privalumai [8]
- Didesnės praplėtimo galimybės (angl. scalling) . Pavyzdžiui, norint padidinti skaitymo/rašymo (angl. read/write) operacijų skaičių mes tiesiog padidiname serverių kiekį, o duomenys automatiškai yra padubliuojami.
- Didesnis lankstumas. Duomenys saugomi duomenų bazėje nėra priklausomi nuo duomenų tipo.
- Skirtingas duomenų bazė modelis skirtingam projektui. Priklausomai nuo projekto pobūdžio galima pritaikyti kitokį modelį, leidžiant padidinti sistemos efektyvumą.
- Lyginant su reliacinėmis duomenų bazėmis turi geresni operatyviosios atminties (RAM) išnaudojimą.
- NoSQL neturi fiksuotos schemos duomenų bazėje. (Pvz. reliacinėje duomenų bazėje turint be galo daug duomenų (pvz. 50 mln.) pridėjus naują stulpelį duomenų bazės per indeksavimas gali užtrukti ilgai, o jam vykstant duomenų bazė bus užrakinta „lock“ ir nebus galima įvykdyti jokių rašymo „write“ operacijų.
NoSQL Trūkumai [8]
- Atsižvelgiant į CAP teoremą, nėra įmanoma vienu metu užtikrinti duomenų šimtaprocentinio pasiekiamumo (ang. Availability) , duomenų vientisumo (angl. Consistency) bei paskirstymo galimybės (angl. Partition Tolerance )
- Sudėtinga kurti duomenų reportus. Lyginant su reliacinėmis, sudėtingas užklausų rašymas.
Literatūra
- [1]."Strozzi NoSQL" Prieiga per internetą: https://en.wikipedia.org/wiki/Strozzi_NoSQL
- [2]."NoSQL: What's in a name?" Prieiga per internetą: http://blog.sym-link.com/2009/10/30/nosql_whats_in_a_name.html
- [3]."CAP theorem" Prieiga per internetą: https://en.wikipedia.org/wiki/CAP_theorem
- [4]."Visual Guide to NoSQL Systems" Prieiga per internetą: http://blog.nahurst.com/visual-guide-to-nosql-systems
- [5]."Introduction to NoSQL" Prieiga per internetą: http://www.w3resource.com/mongodb/nosql.php
- [6]. "Where is NoSQL practically used?" Prieiga per internetą: http://scraping.pro/where-nosql-practically-used/
- [7]."Grafas (matematika)" Prieiga per internetą: https://lt.wikipedia.org/wiki/Grafas_(matematika)
- [8]."10 things you Need to Know About NoSQL Databases" Prieiga per internetą: http://www.databasejournal.com/features/article.php/3905531/10-things-you-Need-to-Know-About-NoSQL-Databases.htm