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 aldakorrak 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 
## 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.

## 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 
* [https://aws.amazon.com/es/compare/the-difference-between-relational-and-non-relational-databases/ ]
* [https://codenotch.com/blog/diferencias-entre-bases-de-datos-relacionales-y-no-relacionales/ ]
* [https://www.camerdata.es/blog/bases-de-datos-no-relacionales-y-relacionales/ ]
* [https://web.archive.org/web/20231208100015/https://www.bimexanalytics.com/post/bases-de-datos-relacionales-sql-vs-no-relacionales ]
* [https://pandorafms.com/blog/es/nosql-vs-sql-diferencias-y-cuando-elegir-cada-una/ ]