# NoSQL

**NoSQL** (inglise *not only SQL)* on mitterelatsiooniline alternatiiv klassikalistele relatsioonilistele andmebaasidele, mis põhinevad eelkõige SQLi baasil. Erinevalt relatsioonilistest andmebaasidest ei pea NoSQL-süsteemid vastama rangelt ette kirjutatud andmemudelile. Baasiks oleva andmemudeli puudumine tähendab, et oluliste äriloogiliste muudatuste tegemine andmebaasi tasemel on oluliselt vähem aega- ja rahanõudev võrreldes relatsiooniliste andmebaasidega. Teine oluline eelis relatsiooniliste ees tuleneb nende võimekusest käsitleda mistahes struktureerimata andmeid. Sellisteks andmeteks võivad olla näiteks kasutajate seansi teave, sõnumid, vestlused, logid, videod, pildid või seadmete andmed.

## Ajalugu

Kuigi mitterelatsiooniliste andmebaaside kontseptsioon pärineb 1960. aastate lõpust, ei leidnud see kuigi palju kasutust enne 21. sajandi algust. Üha suurenevate andmemahtudega toime tulemiseks tuli paljudel IT-tööstuse suurfirmadel 2000. aastate algul hakata vaatama mitterelatsiooniliste andmebaasi lahenduste poole. 2005. aastal tuli Google välja oma Bigtable-nimelise lahendusega.

Teemini NoSQL võttis esmakordselt kasutusele Carlo Strozzi aastal 1998, mil ta tuli välja avatud lähtekoodiga Strozzi NoSQL andmebaasiga, mis ei kasutanud SQL-i liidest, kuid oli siiski relatsiooniline. 2009. aastal võttis termini taas kasutusele Johan Oskarsson, et kirjeldada toona esile kerkima hakkavaid mitterelatsioonilisi ja distributiivseid andmebaase, mis ei järginud senini oluliseks peetud ACID (ingl *atomicity, consistency, isolation, durability*) printsiipe.

## NoSQL-andmebaaside tüübid ja näited

NoSQL-i mõiste on lai – selle alla kuuluvad mitut tüüpi andmete haldussüsteemid, millest põhilisteks on võtme-väärtuse paari tüüpi, dokumendi tüüpi, graafi tüüpi ning lai-veerg tüüpi andmebaasid.

### Võti-väärtus paar

NoSQL-andmebaaside lihtsaim vorm on võtmete ja väärtuste paarid ehk sõnastik. Igale väärtusele vastab andmebaasis kindel unikaalne võti, mille abil saab selle kiiresti üles leida.

### Dokument

Levinuim NoSQL-andmebaaside vorming on dokument. Dokument sarnaneb ülesehituselt võtme-väärtuse paarile, kuid võimaldab hallata väärtustena keerulisemaid andmestruktuure, näiteks loendeid. Sellistes andmebaasides on võimalik hoida dokumente tekstivormingutes nagu näiteks JSON, XML või YAML, aga ka binaarvormingutes nagu PDF, BSON või DOCX.

### Graaf

Graafi tüüpi andmebaasid on loodud kujutamaks andmetevahelisi seoseid. Sellist tüüpi andmebaasid koosnevad sõlmedest ehk kirjetest ning nende omavahelisest seostest. Igal seosel peab olema suund ja nimi ning see peab määrama kahe sõlme vahelise suhte (näiteks linn ASUB riigis). Graafi tüüpi andmebaaside abil on võimalik kujutada näiteks inimeste suhtlusvõrgustikku, ühistranspordivõrgustikku või teedevõrgustikku.

### Lai-veerg

Lai-veerg tüüpi andmebaasid võimaldavad hallata suuri andmemahtusid. Kasutatakse tabeleid, ridu ja veerge, kuid erinevalt relatsioonilistest andmebaasidest võivad veergude nimed ja vormingud ridade kaupa ühes tabelis erineda.

Näited NoSQL-andmebaaside haldussüsteemidest| Tüüp | Näited |
| --- | --- |
| Võti-väärtus | Amazon Dynamo, Oracle NoSQL, Redis, Apache Ignite |
| Dokument | Apache CouchDB, Couchbase, MongoDB, Riak |
| Graaf | Neo4J, InifiniteGraph, Apache Giraph, OrientDB |
| Lai-veerg | Apache Cassandra, Google Bigtable, Apache HBase |

## Vaata ka

* Andmebaasi disain

## Viited