# NoSQL

**NoSQL**, "**Not Only SQL**" edo "**Ez Bakarrik SQL**" informatikan erabiltzen den laburdura, datu-base erlazionalen eredu klasikotik aldentzen diren datu-baseen sistemen multzoari deritzo.

NoSQLen ezaugarririk nabarmenena, SQL kontsulta-lengoaiatzat ez dutela erabiltzen da. Sistema hauek, kasu desberdinei moldatzeko, datuak egitura finkorik behar izan gabe biltegiratzen dituzte. Horrez gain, datu-base erlazionalek ez bezala, ez dute JOIN eragiketarik onartzen, honek alabaina ez du esan nahi datuak erlazionatzeko modurik ez dagoenik. Gainera, datu-basea eskalatzeko, modu horizontalean egiten da, datu-base erlazionaletan ez bezala, non bertikalki eskalatzen da. Eskalamendu mota hau datu-base mota honen funtsezko ezaugarria da.

## Historia

2000ko hamarkadan, Interneten gorakadak, egituratu gabeko datu-kopuru handiak sortu zituen, datu-base erlazionalen mugak erakutsiz. Google eta Amazon-en moduko enpresa teknologiko handiek Google Bigtable eta DynamoDB bezalako irtenbideak garatu zituzten. 2009an, "NoSQL" terminoa sortu zen San Frantziskoko konferentzia batean, eta datu-base alternatiboen sorrera markatu zen. Harrezkero, eztanda bat egon da NoSQL datu-baseen garapenean, hainbat industriatan eskalagarriak eta malguak direlako.

## Datu-motak

NoSQL datu-baseek ez dute ikuspegi bera datuak biltegiratzeko eta berreskuratzeko, ohiko datu-base erlazionalekin alderatuta. NoSQL sistemak datuen eskakizunak askotarikoak eta Aldagarriak diren inguruneetan diseinatu dira. Haien helburua eskalagarritasunarekin, eskemaren malgutasunarekin eta errendimenduarekin lotutako arazo espezifikoei aurre egitea da. Gainera, datu-base baten datu motak deskribatzeko, normalean "entitate" terminoa erabiltzen da, informazioa bildu eta biltzen den zerbaiti dagokiona.

Hauek, NoSQL datu-baseetan ohikoak diren datu-mota batzuk aztertuko dira:

* **Dokumentuak biltegiratzea (Document Store)**: Datu-base mota honek, dokumentuetan gordetzen du informazioa, normalean JSON edo BSON formatuetan. Dokumentu bakoitza independentea da, eta egitura malgua izan dezake.
* **Grafoen datu-basea (Graph Database):** Erlazio konplexuak dituzten datuak modelatzeko eta biltegiratzeko diseinatua dago. Erakundeak eta haien arteko harremanak irudikatzeko grafo-egiturak erabiltzen ditu, eta eraginkorra da harreman-ereduak barne hartzen dituzten kontsultetarako.
* **Klabe-balioa cachean biltegiratzea (Key – value Cache)**: Datu-base mota honek, datuak klabe-balio binaka biltegiratzen ditu eta bere helburua, *cache* memorian gordez gero, errendimendua optimizatzea da. Eraginkorra da klabeak erabiliz datuak azkar berreskuratzeko.
* **Klabe-balioaren biltegiratzea (Key – value Store)**: Datuak klabe-balio binaka biltegiratzen ditu, eta balio bakoitza gako klabe bati lotuta dago. Erraza eta eraginkorra da irakurketa eta idazketa eragiketetan.
* **Klabe-balioaren biltegiratze trinkoa (Key – value Store (Eventually Consistent)):** Aurrekoen antzekoa da, baina behin-behineko trinkotasunean oinarrituta. Horrek esan nahi du datu basea, eguneratu ondoren, egoera sendo batera joango dela.
* **Klabea-balioa ordenatuta biltegiratzea (Key – value Store (Ordered)):** Datu-base mota honek, klabeetan ordena espezifikoa du. Honek, datuak ordena espezifiko batean berreskuratzea errazten du.
* **Multialor datu-basea (Multivalue Database):** Entitate jakin baterako atributuak edo balioak gordetzeko diseinatua dago. Datuak adierazteko malgutasuna behar duten inguruneetan erabiltzea komenigarria da.
* **Eredu anitzeko datu-base natiboa (Native Multi-model Database):** Datu-base bakar batean hainbat datu-eredu erabil ahal dira. Hala nola, dokumentuak, grafoak eta klabe-balioa. Datu mota desberdinetara egokitzeko malgutasuna ematen du.
* **Objektuen datu-basea (Object Database)**: Datuak objektu moduan biltegiratzen ditu, eta horrek egitura konplexuak eta objektu-objektu erlazioak irudikatzea errazten du. Eraginkorra da objektuetara bideratutako aplikazioetarako.
* **Biltegiratze hirukoitza (Triplestore):** Erabiltzen da datu-tripletak biltegiratzeko eta berreskuratzeko, hau da, subjektua, predikatua eta objektua. Normalean datu semantikoak erabiltzen dituzten aplikazioetan erabiltzen da.
* **Tuploak biltegiratzea (Tuple Store):** Tuplen formako datuak biltegiratzen ditu, eta horiek elementuen sekuentzia ordenatuak dira. Kontsultak eta datu-eragiketak eraginkorrak dira.

* **Zutabe zabalak biltegiratzea (Wide-column Store):** Datuak zutabeetan biltegiratzen ditu errenkaden ordez, eta datuen berreskurapena optimizatzen du kontsulta analitikoetarako eta agregazioetarako. Datu masiboen multzoak gordetzeko eraginkorra da.

NoSQL datu-base mota horiek, aplikazioaren baldintza espezifikoen eta datuetara sartzeko patroien arabera hautatzen dira. Datu-base egokia aukeratzea hainbat faktoreren mende dago, hala nola datuen izaera, eskatutako eskalagarritasuna, kontsulta-patroiak eta sendotasun eta erabilgarritasun beharrak.

## NoSQL datu-base motak

| Datu Mota | Adibide garrantzitsuak |
| --- | --- |
| Dokumentuak biltegiratzea (Document Store) | Azure Cosmos DB, ArangoDB, BaseX, Clusterpoint, Couchbase, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, RavenDB, Qizx, RethinkDB, Elasticsearch, OrientDB |
| Grafoen datu-basea (Graph Database) | Azure Cosmos DB, AllegroGraph, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, Neo4J, OrientDB, Virtuoso |
| Klabe-balioa cachean biltegiratzea (Key–value Cache) | Apache Ignite, Couchbase, Coherence, eXtreme Scale, Hazelcast, Infinispan, Memcached, Redis, Velocity |
| Klabe-balioaren biltegiratzea (Key–value Store) | Azure Cosmos DB, ArangoDB, Amazon DynamoDB, Aerospike, Couchbase, ScyllaDB |
| Klabe-balioaren biltegiratze trinkoa (Key–value Store (Eventually Consistent)) | Azure Cosmos DB, Oracle NoSQL Database, Riak, Voldemort |
| Klabea-balioa ordenatuta biltegiratzea (Key–value Store (Ordered)) | FoundationDB, InfinityDB, LMDB, MemcacheDB |
| Multialor datu-basea (Multivalue Database) | D3 Pick database, Extensible Storage Engine (ESE/NT), InfinityDB, InterSystems Caché, jBASE Pick database, mvBase Rocket Software, mvEnterprise 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 |
| Eredu anitzeko datu-base natiboa (Native Multi-model Database) | ArangoDB, Azure Cosmos DB, OrientDB, MarkLogic, Apache Ignite, Couchbase, FoundationDB, Oracle Database |
| Objektuen datu-basea (Object Database) | Objectivity/DB, Perst, ZODB, db4o, GemStone/S, InterSystems Caché, JADE, ObjectDatabase++, ObjectDB, ObjectStore, ODABA, Realm, OpenLink Virtuoso, Versant Object Database |
| Biltegiratze hirukoitza (Triplestore) | AllegroGraph, MarkLogic, Ontotext-OWLIM, Oracle NoSQL database, Profium Sense, Virtuoso Universal Server |
| Tuploak biltegiratzea (Tuple Store) | Apache River, GigaSpaces, Tarantool, TIBCO ActiveSpaces, OpenLink Virtuoso |
| Zutabe zabalak biltegiratzea (Wide-column Store) | Azure Cosmos DB, Amazon DynamoDB, Bigtable, Cassandra, Google Cloud Datastore, HBase, Hypertable, ScyllaDB |

## Alde positiboak eta negatiboak

### Abantailak

* **Eskalagarritasun horizontala:** NoSQL datu-base asko horizontalean eskalatzeko diseinatuta daude, eta horrek esan nahi du datu-bolumen handiekin lan egiteko ahalmena daukatela, karga hainbat zerbitzari edo nodoren artean banatuz.
* **Eskema-malgutasuna:** NoSQL datu-baseek, bereziki dokumentu eta klabe-balio motakoak, eskema malguak ahalbidetzen dituzte. Hori onuragarria da datu-eskakizunak azkar alda daitezkeen inguruneetan.
* **Errendimendu hobea erabilera-kasu jakin batzuetarako:** Eragiketa jakin batzuetarako, hala nola, irakurketa eta idazketa masiboetarako edo egituratu gabeko datuen kontsultetarako, NoSQL datu-base batzuek ohiko datu-base erlazionalek baino errendimendu handiagoa eskain dezakete.
* **Egituratu gabeko datu-bolumen handiak maneiatzea:** NoSQL datu-baseak egituratu gabeko edo erdiegituratutako datuak maneiatzeko eraginkorrak dira, hala nola JSON edo XML dokumentuak. Horrez gain, web-aplikazio modernoetarako egokiak dira.
* **Datu-eredu espezializatuak:** NoSQLk hainbat datu-eredu eskaintzen ditu (dokumentuak, balio-klabeak, grafoak, etab.), eta hobeto egokitzen dira datu-mota eta sarbide-patroi desberdinetara.

### Eragozpenak

* **Ez dago estandar bat**: NoSQL datu-base mota bat baino gehiago dagoenez, ez dago horien ezarpena arautzen duen estandar bakar bat. Horrek zaildu egin dezake elkarreragingarritasuna eta sistemen arteko datu-eramangarritasuna.
* **Kontsulta konplexuen kostua:** NoSQL datu-base batzuek, bereziki klabe-balio motakoak, mugak izan ditzakete datuen arteko erlazio ugari inplikatzen dituzten kontsulta konplexuak egiteko orduan.
* **Heldutasun txikiagoa datu-base erlazionalekin alderatuta**: NoSQL datu-baseek nabarmen aurreratu badute ere, oraindik ez dute lortu datu-base erlazionalen heldutasuna eta egonkortasuna.
* **Ikaskuntza-kurba:** Datu-base erlazionaletatik NoSQLra pasatzera ez da erraza. Denbora behar da NoSQLren datu eta kontsulta berariazko eredu berriak menderatzeko.

Azken batean, SQL eta NoSQL datu-baseen arteko hautaketa aplikazioaren berariazko betekizunen eta lortu nahi den malgutasunaren eta sendotasunaren arteko orekaren mende dago.

## Errendimendua

NoSQL datu-baseen errendimendua segundoko burutzen dituen eragiketa neurtzen dituen metrika erabiliz ebaluatu ohi da. Errendimenduaren ebaluazioak erreferentzia-indize egokiei erreparatu behar die, hala nola ekoizpenaren konfigurazioei, datu-baseen parametroei, datuen bolumen aurrikusia eta erabiltzailearen lan-karga konkurrenteei.

Ben Scofieldek NoSQL datu-baseen kategoria desberdinak honela kalifikatu zituen:

| Datu-eredua | Errendi-mendua | Eskalagarria | Malgua | Konplexua | Datuen osotasuna | Funtzionala |
| --- | --- | --- | --- | --- | --- | --- |
| Giltza-baliokoak | Handia | Handia | Handia | Bat ere ez | Txikia | Aldagarria (bat ere ez) |
| Zutabeetakoak | Handia | Handia | Neurrizko | Txikia | Txikia | Minimoa |
| Dokumentukoak | Handia | Aldagarria (altua) | Handia | Txikia | Txikia | Aldagarria (baxua) |
| Grafokoak | Aldagarria | Aldagarria | Handia | Handia | Baxu - ertaina | Grafoen teoria |
| Datu-base erlazionalak | Aldagarria | Aldagarria | Txikia | Neurrizko | Handia | Erlazio-aljebra |

Errendimendu eta eskalagarritasun konparaketak YCSB benchmark-a erabiliz egiten dira gehien bat.

## Funtsezko desberdintasunak datu-base erlazionalekin

### Eskema

Datu-base erlazionaletan eskema finkoa eta aurredefinitua da. Datuak sartu aurretik, taulen egitura ezarri behar da, zutabeak eta datu motak zehaztuz. Ezaugarri honek, erredundantzia minimizatzea eta sendotasuna bermatzea du helburu. Taulen arteko erlazioak klabe primarioen eta kanpoko klabeen bidez ezartzen dira, osotasun erreferentzialari eutsiz. SQL lengoaia datuak kontsultatzeko eta manipulatzeko erabiltzen da. Horretarako, hainbat tauletatik informazioa ateratzeko, JOIN moduko eragiketak erabiltzen dira.

Hala ere, NoSQL datu-baseek malgutasuna eskaintzen dute eskeman. Eskema dinamiko bat izan dezakete, edo aurrez ez definitutako eskema bat. Gainera, datuen egituran izandako aldaketetara egokitu daitezke, eskema aldez aurretik aldatu barik. Malgutasun hori bereziki erabilgarria da datuen formatua sarritan aldatzen denean. Horrez gain, NoSQL datu-baseek egituratu gabeko edo erdi egituratutako datuak biltegiratu ditzakete, hala nola JSON dokumentuak edo klabe-balio pareak, taulen zurruntasunak. Hauen guztien arteko erlazioak mugatu gabe.

### Eskalagarritasuna

Nahiz eta frogatuta egon, datu-base eralazionalek eskalagarritasunario buruzko erronkei aurre egiteko joera dute, eta eremu horretan NoSQL nabarmentzen da horizontalki eskalatzeko duen gaitasunari esker.

### Transakzioak eta eragiketak

Datu-base erlazionalen transakzioen funtzionamendua ACID (Atomikotasuna, Sendotasuna, Isolamendua eta Iraunkortasuna) akronimoan oinarrituta dago. Ezaugarri horiek datuen osotasuna eta sendotasuna bermatzeko funtsezkoak dira, bereziki eragiketa asko aldi berean gerta daitezkeen inguruneetan. Atomikotasunak, transakzioak unitate zatiezin gisa egitea bermatzen du. Sendotasunak transakzioek baliozko egoera batetik bestera eramatea ziurtatzen du. Isolamenduak transakzioen arteko interferentziak saihesten ditu eta Iraunkortasunak aldaketak iraunkorrak izatea ziurtatzen du, baita sistemaren akatsen kasuan ere.

Bestalde, erlazionalak ez diren datu-baseen testuinguruan, beste ikuspegi bat hartzen da, BASE gisa ezagutzen dena (Funtsean Eskuragarri, Egoera Leuna, Batzuetan Sendoa). ACIDek ez bezala, BASEak moldagarriagoa da ingurune banatuetan, hau da, zerbitzuak leku desberdinetan garatzen direnean. Horrez gain, ez ditu erabat bermatzen datu-base erlazionaletako transakzioen ezaugarri zorrotzak.

NoSQL motatako datu-baseko transakzioen funtzionamendua BASEn oinarritzen da. Beraz,  "Funtsean eskuragarri" horrek sistema beti eskuragarri dagoela esan nahi du, akats partzialak egon arren. "Egoera leuna" esan nahi du sistemaren zati desberdinak egoera desberdinetan egon daitezkeela, baina denborarekin, desberdintasun horiek estatu koherente baterantz bateratuko dira. Azkenik, "Batzuetan sendoa" izateak, denborarekin eta eguneratze berririk gabe, sistema egoera koherente batera joango dela iradokitzen du.

Laburbilduz, ACIDek berehalako sendotasun atomikoa azpimarratzen duen bitartean, BASEak eskuragarritasuna lehenesten du eta nolabaiteko sendotasuna onartzen du, ingurune banatuetarako eta oso eskalagarrietarako egokiagoa izanik, ezaugarri komunak erlazionalak ez diren datu-baseetan.

### Erabilerak

#### NoSQLren erabilerak

Horrelako datu-baseak oso komenigarriak dira horizontalki eskalatu behar denerako. Gainera, perfektuak dira egituratu gabeko datuekin lan egin nahi denean eta irakurketa eta idazketa eraginkorretan abiadura lehenetsi nahi denean. Eskeman, malgutasuna eskaintzen dute, eta idealak dira eskala handiko web-aplikazioetarako eta datu-base arinerako.

#### Datu-base erlazionalen erabilerak

Ezin hobeak dira harreman argiak eta transakzio konplexuak eskatzen dituzten aplikazio tradizionaletarako, hala nola enpresa-sistemetarako eta kontabilitaterako. Egituratutako kontsultetan bikainak dira eta berehalako sendotasuna bermatzen dute.

## Erreferentziak

## Ikus, gainera

* Datu-base
* Datu-base erlazional
* SQL
* Mongo DB

## Kanpo estekak

* AWS. (s.f.). “Bases de datos relacionales frente a los no relacionales: diferencia entre los tipos de bases de datos”. [AWS].
* Codenotch. (s.f.). “Diferencias entre Bases de Datos relacionales y no relacionales”. [Codenotch].
* Camerdata. (s.f.). “Diferencia entre bases de datos no relacionales y relacionales”. [Camerdata].
* Bimexanalytics. (s.f.). “Bases de datos relacionales (SQL) vs no relacionales (NoSQL): qué son”. [Bimexanalytics].
* Pandora FMS. (s.f.). “NoSQL vs SQL: principales diferencias y cómo elegir”. [Pandora FMS].