# NoSQL

**NoSQL** (fillimisht duke iu referuar "jo- SQL " ose "jo-relacionale") është një qasje në projektimin e bazës së të dhënave që fokusohet në ofrimin e një mekanizmi për ruajtjen dhe marrjen e të dhënave që jane modeluar në menyra të tjera perveq marrëdhënieve tabelare të përdorura në bazat e të dhënave relacionale .Në vend të strukturës tipike tabelare të një baze të dhënash relacionale, bazat e të dhënave NoSQL ruajnë të dhënat brenda një strukture të vetme të dhënash. Për shkak se ky dizajn i bazës së të dhënave jo-relacionale nuk kërkon një skemë, ai ofron shkallëzim të shpejtë për të menaxhuar grupe të mëdha dhe zakonisht të pastrukturuara të të dhënave.[2]Sistemet NoSQL quhen gjithashtu nganjëherë *"Jo vetëm SQL"* për të theksuar se ato mund të mbështesin gjuhë kerkimi të ngjashme me SQL ose të funksionojnë paralelisht me bazat e të dhënave SQL në arkitektura poliglote me qëndrueshmëri.[3][4]

Bazat e të dhënave jo-relacionale ekzistojnë që nga fundi i viteve 1960, por termi "NoSQL" u krijua vetëm në fillim të viteve 2000, [5] i nxitur nga nevojat në rritje të kompanive të Web 2.0. [1][2] Aktualisht, bazat e të dhënave NoSQL përdoren gjithnjë e më shpesh në menaxhimin e të dhënave të mëdha dhe në aplikacione në internet me përpunim në kohë reale. [3]

Motivimet për këtë qasje përfshijnë thjeshtësinë e dizajnit, shkallëzimin më të thjeshtë "horizontal" në grupe serveresh (një sfidë për bazat e të dhënave relacionale), kontroll më të mirë mbi disponueshmërinë dhe adresimin e mospërputhjeve të impedancës objekt-relacionale. [2]Strukturat e të dhënave të përdorura nga bazat e të dhënave NoSQL (si çiftet çelës-vlerë, kolonat e gjera, grafet ose dokumentet) janë të ndryshme nga ato që përdoren zakonisht në bazat e të dhënave relacionale, duke i bërë disa operacione më të shpejta në NoSQL. Përshtatshmëria specifike e një baze të dhënash NoSQL varet nga natyra e problemit që duhet zgjidhur. Për më tepër, strukturat e të dhënave të përdorura në bazat e të dhënave NoSQL shpesh konsiderohen si "më fleksibël" sesa tabelat tradicionale të bazave të të dhënave relacionale. [3]

Shumë baza të të dhënave NoSQL bëjnë kompromis në qëndrueshmëri (sipas teoremës CAP) në favor të disponueshmërisë, tolerancës ndaj ndarjeve dhe shpejtësisë. Pengesat për adoptimin më të gjerë të bazave të të dhënave NoSQL përfshijnë përdorimin e gjuhëve të pyetjeve të nivelit të ulët (në krahasim me SQL, për shembull), mungesën e aftësisë për të kryer bashkime ad hoc midis tabelave, mungesën e ndërfaqeve të standardizuara, si dhe investimet e mëdha të mëparshme në bazat ekzistuese të të dhënave relacionale. [1] . Shumicës së bazave të të dhënave NoSQL u mungojnë transaksionet e plota ACID, megjithatë disa, si MongoDB i kanë integruar ato si pjesë thelbësore të modeleve të tyre. [2]

Në vend të kësaj, shumica e bazave të të dhënave NoSQL ofrojnë një koncept të " konsistencës eventuale ", në të cilin ndryshimet e bazës së të dhënave përhapen në të gjitha nyjet "përfundimisht" (zakonisht brenda milisekondave), kështu që pyetjet për të dhënat mund të mos kthejnë të dhëna të përditësuara menjëherë ose mund të rezultojnë në leximin e të dhënave që janë jo i saktë, një problem i njohur si lexim i ndenjur . Për më tepër, disa sisteme NoSQL mund të shfaqin shkrime të humbura dhe forma të tjera të humbjes së të dhënave . [2] Disa sisteme NoSQL ofrojnë koncepte të tilla si regjistrimi paraprak për të shmangur humbjen e të dhënave. [3] Për përpunimin e transaksioneve të shpërndara nëpër baza të të dhënave të shumta, konsistenca e të dhënave është një sfidë edhe më e madhe që është e vështirë si për NoSQL ashtu edhe për bazat e të dhënave relacionale. Bazat e të dhënave relacionale "nuk lejojnë kufizimet e integritetit të referencës të përfshijnë bazat e të dhënave". [4] Pak sisteme ruajnë si transaksionet ACID ashtu edhe standardet X/Open XA për përpunimin e transaksioneve të shpërndara . [5] Bazat e të dhënave relacionale ndërvepruese ndajnë teknikat e analizës së rele konformacionale si një veçori të përbashkët. [6] Kufizimet brenda mjedisit të ndërfaqes janë kapërcyer duke përdorur protokollet e virtualizimit semantik, të tilla që shërbimet NoSQL janë të aksesueshme për shumicën e sistemeve operative .

## Historia

Termi **NoSQL** u përdor për herë të parë nga Carlo Strozzi në vitin 1998 për të emërtuar bazën e tij të të dhënave të lehta relacionale **Strozzi NoSQL**, me burim të hapur, e cila nuk ekspozonte ndërfaqen standarde të gjuhës së strukturuar të pyetjeve (SQL), por mbetej ende relacionale. Baza e tij e të dhënave NoSQL RDBMS ndryshon nga koncepti i përgjithshëm i bazave të të dhënave NoSQL, që u zhvillua rreth vitit 2009. Strozzi sugjeron se, duke qenë se lëvizja aktuale NoSQL "largohet nga modeli relacional, ajo duhet të quhej më saktë 'NoREL'", [2] duke iu referuar "jo-relacionale".

Johan Oskarsson, në atë kohë zhvillues në Last.fm, e rifuqizoi termin **NoSQL** në fillim të vitit 2009, kur organizoi një ngjarje për të diskutuar mbi "bazat e të dhënave të shpërndarame burim të hapur , jo-relacionale ". Ky emër u përdor për të përshkruar shfaqjen e një numri gjithnjë në rritje të bazave të të dhënave jo-relacionale dhe të shpërndara, duke përfshirë klonet me burim të hapur të **Bigtable** dhe **MapReduce** të Google, si dhe **DynamoDB** të Amazon.

## Llojet dhe shembujt

Ka mënyra të ndryshme për të radhitur bazat e të dhënave NoSQL, me kategori dhe nënkategori të ndryshme, disa prej të cilave mund te jene te njejta. Ajo që vijon është një klasifikim jo shterues sipas modelit të të dhënave

### Dyqan me vlerë-çelës

Dyqanet **kryesore-vlerë** (KV) përdorin **grupin shoqërues** (i quajtur gjithashtu një hartë ose fjalor) si modelin e tyre themelor të të dhënave. Në këtë model, të dhënat paraqiten si një koleksion çiftesh **çelës-vlerë**, ku çdo çelës i mundshëm shfaqet maksimumi një herë në koleksion. [1][2]

Modeli i **vlerës-kyç** është një nga modelet më të thjeshta të të dhënave jo-relacionale, dhe modelet më të pasura të të dhënave shpesh zbatojnë këtë model si një zgjerim të tij. Modeli **çelës-vlerë** mund të zgjerohet në një model të renditur në mënyrë diskrete që ruan çelësat në rend leksikografik. Ky zgjerim është i fuqishëm nga pikëpamja llogaritëse, pasi mund të merret në mënyrë efikase vargje selektive të çelësave. [1].

Dyqanet me **vlerë-kyç** mund të përdorin modele konsistence që variojnë nga **qëndrueshmëria eventuale** deri te **serializimi**. Disa baza të të dhënave mbështesin renditjen e çelësave. Ka implementime të ndryshme harduerike dhe disa përdorues ruajnë të dhëna në **memorie (RAM)**, ndërsa të tjerë në disqet e gjendjes së ngurtë (SSD) ose disqe rrotulluese (njëkohësisht të njohura si **hard disk drive (HDD)**).

### Dyqan dokumentesh

Koncepti qendror i një dyqani **dokumentesh** është ai i një "dokumenti". Ndërsa detajet e këtij përkufizimi ndryshojnë midis bazave të të dhënave të orientuara nga dokumenti, të gjitha ato supozojnë se dokumentet përmbledhin dhe kodojnë të dhënat (ose informacionin) në disa formate ose kodime standarde. Kodimet në përdorim përfshijnë XML, YAML dhe JSON dhe forma binare si BSON . Dokumentet adresohen në bazën e të dhënave nëpërmjet një çelësi unik që përfaqëson atë dokument. Një karakteristikë tjetër përcaktuese e një baze të dhënash të orientuar nga dokumenti është një API ose një gjuhë pyetjesh për të marrë dokumente bazuar në përmbajtjen e tyre.

Implementime të ndryshme ofrojnë mënyra të ndryshme për të organizuar dhe/grupuar dokumentet:

* Koleksionet
* Etiketat
* Meta të dhëna jo të dukshme
* Hierarkitë e drejtorive

Në krahasim me bazat e të dhënave relacionale, **koleksionet** mund të krahasohen me **tabelat**, ndërsa **dokumentet** me **regjistrimet**. Megjithatë, ato janë të ndryshme – çdo rekord në një tabelë ka të njëjtën strukturë fushash, ndërsa dokumentet në një koleksion mund të kenë fusha të ndryshme nga njëra-tjetra.

### Grafiku

**Bazat e të dhënave të grafikut** janë të dizajnuara për të ruajtur të dhëna, ku marrëdhëniet midis elementëve përfaqësohen si një grafik i lidhur me një numër të kufizuar marrëdhëniesh. Shembuj përfshijnë marrëdhëniet sociale, lidhjet e transportit publik, hartat rrugore, topologjitë e rrjetit, etj.

Bazat e të dhënave të grafikut dhe gjuha e tyre e pyetjeve
## Performanca

**Performanca e bazave të të dhënave NoSQL** zakonisht vlerësohet duke përdorur metrikën e **xhiros**, e cila matet si operacione për sekondë. Vlerësimi i performancës duhet të marrë parasysh standardet e duhura, siç janë konfigurimet e prodhimit, parametrat e bazave të të dhënave, vëllimi i parashikuar i të dhënave dhe ngarkesat e njëkohshme të punës së përdoruesit.

**Ben Scofield** vlerësoi kategori të ndryshme të bazave të të dhënave NoSQL si në vijim: [1]

| Modeli i të dhënave | Performanca | Shkallueshmëria | Fleksibiliteti | Kompleksiteti | Integriteti i të dhënave | Funksionaliteti |
| --- | --- | --- | --- | --- | --- | --- |
| Dyqan me vlerë-çelës | lartë | lartë | lartë | asnjë | të ulëta | variabël (asnjë) |
| Dyqan i orientuar nga kolona | lartë | lartë | i moderuar | të ulëta | të ulëta | minimale |
| Dyqan i orientuar drejt dokumenteve | lartë | e ndryshueshme (e lartë) | lartë | të ulëta | të ulëta | e ndryshueshme (e ulët) |
| Baza e të dhënave grafike | e ndryshueshme | e ndryshueshme | lartë | lartë | me mjekësi të ulët | teoria e grafikut |
| Baza e të dhënave relacionale | e ndryshueshme | e ndryshueshme | të ulëta | i moderuar | lartë | algjebër relacionale |

Krahasimet e **performancës** dhe **shkallëzueshmërisë** zakonisht kryhen duke përdorur standardin **YCSB**.

## Trajtimi i të dhënave relacionale

Pasi shumica e bazave të të dhënave NoSQL nuk mbështesin bashkimet në pyetje, skema e bazës së të dhënave duhet të dizajnohet ndryshe. Ekzistojnë tre teknika kryesore për trajtimin e të dhënave relacionale në një bazë të dhënash NoSQL. (Shih tabelën për **Bashkimet** dhe **Mbështetjen ACID** për bazat e të dhënave NoSQL që mbështesin bashkimet.)

### Pyetje të shumta

Në vend që të merrni të gjitha të dhënat me një pyetje, është e zakonshme të bëhen disa pyetje për të marrë të dhënat e dëshiruara. Pyetjet NoSQL janë shpesh më të shpejta se kërkesat tradicionale SQL, kështu që kostoja e pyetjeve shtesë mund të jetë e pranueshme. Nëse do të ishte i nevojshëm një numër i tepërt i pyetjeve, një nga dy qasjet e tjera është më e përshtatshme.

### Caching, replikim dhe të dhëna jo të normalizuara

Në vend që të merrni të gjitha të dhënat me një pyetje, është e zakonshme të bëhen disa pyetje për të marrë të dhënat e dëshiruara. Pyetjet NoSQL janë shpesh më të shpejta se kërkesat tradicionale SQL, kështu që kostoja e pyetjeve shtesë mund të jetë e pranueshme. Nëse do të ishte i nevojshëm një numër i tepërt i pyetjeve, një nga dy qasjet e tjera është më e përshtatshme.

### Mbledhja e të dhënave

Me bazat e të dhënave të dokumenteve si **MongoDB**, është e zakonshme të ruani më shumë të dhëna në një numër më të vogël koleksionesh. Për shembull, në një aplikacion blogimi, mund të zgjidhet që komentet të ruhen brenda dokumentit të postimit të blogut, në mënyrë që me një rikthim të vetëm të merren të gjitha komentet. Kështu, në këtë qasje, një dokument përmban të gjitha të dhënat e nevojshme për një detyrë specifike

## ACID dhe bashkohuni me mbështetjen

Një bazë të dhënash mund të etiketohet si mbështetëse për **ACID** (Atomicitet, Konsistenca, Izolimi, Qëndrueshmëria) ose operacione të bashkuara nëse dokumentacioni i saj e bën këtë pohim. Megjithatë, kjo nuk do të thotë që kjo mbështetje është e njëjtë si në shumicën e bazave të të dhënave **SQL**, ku këto veçori janë më të forta dhe të garantuara në mënyrë rigoroze.

## Optimizimi i pyetjeve dhe indeksimi në bazat e të dhënave NoSQL

Baza të dhënash të ndryshme NoSQL, si DynamoDB, MongoDB, Cassandra, Couchbase, HBase dhe Redis, tregojnë sjellje të ndryshme kur kërkojnë fusha që nuk janë të indeksuara. Shumë prej tyre kryejnë skanime të plota të tabelave ose koleksioneve për këto pyetje, duke aplikuar operacione filtrimi pas marrjes së të dhënave. Megjithatë, bazat moderne të të dhënave NoSQL shpesh përfshijnë funksionalitete të avancuara për të optimizuar performancën e pyetjeve. Për shembull, MongoDB mbështet indekset e përbëra dhe strategjitë e optimizimit të pyetjeve, Cassandra ofron indekse dytësore dhe pamje të materializuara, dhe Redis përdor mekanizma indekse me porosi të përshtatur për raste specifike përdorimi. Sistemet si Elasticsearch përdorin indekse të përmbysura për kërkime efikase të bazuara në tekst, por ato ende mund të kërkojnë skanime të plota për fusha që nuk janë të indeksuara. Kjo sjellje reflekton fokusin e dizajnit të shumë sistemeve NoSQL në shkallëzueshmërinë dhe operacionet efikase të bazuara në çelësa, në vend të kërkimeve të optimizuara për fusha të tjera. Si pasojë, ndërsa këto baza të dhënash janë të shkëlqyera për operacionet themelore CRUD dhe kërkimet e bazuara në çelësa, përshtatshmëria e tyre për pyetje komplekse që përfshijnë bashkime ose filtrim të pa indeksuar ndryshon në varësi të llojit të bazës së të dhënave – dokument, vlerë-çelës, kolonë të gjerë ose grafik – dhe zbatimin specifik.

## Shihni gjithashtu

* Teorema CAP
* Krahasimi i sistemeve të menaxhimit të bazës së të dhënave të objekteve
* Krahasimi i softuerit të strukturuar të ruajtjes
* C++
* Shkallueshmëria e bazës së të dhënave
* Cache e shpërndarë
* Kërkim i rrafshët
* Baza e të dhënave MultiValue
* Baza e të dhënave me shumë modele
* Bazat e të dhënave skema-agnostike
* Triplestore
* Baza e të dhënave vektoriale

## Referime

## Lexim të mëtejshëm

## Lidhje të jashtme

* Strauch, Christof (12/4/2005). "NoSQL whitepaper" (PDF). Stuttgart: Hochschule der Medien. `{{cite web}}`: Mungon ose është bosh parametri `|language=` (Ndihmë!); Shiko vlerat e datave në: `|date=` (Ndihmë!)
* Edlich, Stefan. "NoSQL database List". Arkivuar nga origjinali më 26 dhjetor 2018. Marrë më 16 dhjetor 2024. `{{cite web}}`: Mungon ose është bosh parametri `|language=` (Ndihmë!)
* Neubauer, Peter (2010). "Graph Databases, NOSQL and Neo4j". `{{cite web}}`: Mungon ose është bosh parametri `|language=` (Ndihmë!)
* Bushik, Sergey (2012). "A vendor-independent comparison of NoSQL databases: Cassandra, HBase, MongoDB, Riak". NetworkWorld. `{{cite web}}`: Mungon ose është bosh parametri `|language=` (Ndihmë!)
* Zicari, Roberto V. (2014). "NoSQL Data Stores – Articles, Papers, Presentations". *odbms.org*. `{{cite web}}`: Mungon ose është bosh parametri `|language=` (Ndihmë!)