Sunteți pe pagina 1din 36

Introducere în Baze de Date

NoSQL
Baze de Date Orientate pe Documente
Ce sunt bazele de date NoSQL?
Bazele de date NoSQL, sau bazele de date „Not only SQL”, sunt un tip de sistem de gestionare
a bazelor de date care oferă un mecanism de stocare și regăsire a datelor care sunt modelate
în alte moduri decât relațiile tabulare utilizate în bazele de date relaționale (cum ar fi bazele de
date SQL). Bazele de date NoSQL sunt concepute pentru a gestiona volume mari de date
nestructurate, semistructurate sau structurate și oferă modele de date flexibile pentru diferite
tipuri de date.
NoSQL: Caracteristici Principale
● Design fără schemă: spre deosebire de bazele de date relaționale, bazele de date NoSQL
sunt adesea fără schemă, ceea ce înseamnă că se pot stoca date fără a defini mai întâi
structura.
● Scalabilitate orizontală: bazele de date NoSQL sunt, în general, concepute pentru a scala
orizontal, în contrast cu bazele de date relaționale care scalează vertical prin adăugarea
mai multor resurse la un singur server.
● Suport pentru Big Data: bazele de date NoSQL sunt potrivite pentru a gestiona volume
mari de date, inclusiv tipuri de date nestructurate și semi-structurate, asociate adesea cu
big data.
● Diverse modele de date: bazele de date NoSQL acceptă diverse modele de date: perechi
cheie-valoare, orientate pe documente, columnare și baze de date graf. Această
diversitate permite flexibilitate în alegerea modelului care se potrivește cel mai bine
nevoilor aplicației.
NoSQL: Tipuri
● Orientate pe documente: aceste baze de date stochează date într-un format
semistructurat, utilizând de obicei formate precum JSON sau BSON. Exemplele includ
MongoDB și CouchDB.
● Stocare cheie-valoare: datele sunt stocate ca perechi cheie-valoare, unde fiecare cheie
unică este asociată cu o anumită valoare. Exemplele includ Redis și Amazon DynamoDB.
● Stocare pe coloane: datele sunt stocate mai degrabă în coloane decât în ​rânduri, ceea ce
le face potrivite pentru taskuri analitice. Exemplele includ Apache Cassandra și HBase.
● Baze de date graf: Aceste baze de date sunt concepute pentru date ale căror relații sunt
bine reprezentate sub formă de graf. Exemplele includ Neo4j și Amazon Neptune.
Motivarea NoSQL
Bazele de date relaționale tradiționale vin cu anumite limitări, mai ales în contextul nevoilor
moderne de date care evoluează rapid. Unele dintre limitările cheie includ:

Rigiditatea schemei Costul licenței și al hardware-ului


Provocări de scalabilitate Suport limitat pentru modelele de date
NoSQL
Nu este potrivit pentru date nestructurate
Probleme de concurență
sau semi-structurate

Blocajele de performanță Complexitatea administrării

Disponibilitate ridicată și toleranță la erori


Baze de Date Orientate pe Documente
Sunt cunoscute pentru flexibilitatea lor, iar această flexibilitate provine în primul rând din
capacitatea lor de a stoca date într-un format fără schemă sau semi-structurate. Aspectele
care evidențiază flexibilitatea bazelor de date de documente:
● Design fără schemă: nu se aplică o schemă rigidă, predefinită. Permit stocarea datelor
într-un format flexibil, orientat spre documente, utilizând de obicei formate precum JSON
sau BSON (JSON binar).
● Evoluție dinamică a schemei: Pe măsură ce cerințele aplicației evoluează, modelul se
poate adapta cu ușurință fără a fi nevoie de migrări complexe. Pot fi adăugate câmpuri noi
în documente, câmpurile existente pot fi modificate sau eliminate după nevoi.
● Structuri de date imbricate și complexe: acceptă structuri de date imbricate și complexe în
cadrul documentelor. De exemplu, un document poate conține vectori, subdocumente sau
chiar alte documente, permițând reprezentarea unor date complexe, imbricate.
Baze de Date Orientate pe Documente
● Date polimorfe: documentele dintr-o colecție pot reprezenta diferite tipuri de entități sau
obiecte cu atribute diferite. Permite stocarea diferitelor tipuri de date în aceeași colecție.
● Performanță îmbunătățită de citire și scriere: deoarece datele asociate sunt adesea
stocate împreună într-un document, acestea pot oferi performanțe îmbunătățite de citire și
scriere pentru anumite tipuri de interogări. Selectarea unui document complet este adesea
mai eficientă decât efectuarea de joinuri.
● Flexibilitatea interogărilor: acceptă limbaje de interogare flexibile și expresive care permit
interogări pe baza conținutului documentelor.
● Frameworkuri de agregare: oferă frameworkuri de agregare care permit procesarea și
transformarea complexă a datelor în baza de date. Acest lucru permite executarea de
operațiuni avansate de analiză și prelucrare a datelor direct pe documentele stocate.
● Scalabilitate orizontală: sunt concepute pentru a scala orizontal prin distribuirea datelor pe
mai multe noduri sau servere.
Baze de Date Orientate pe Documente
Flexibilitatea oferită constă în capacitatea lor de a se adapta la modelele de date dinamice, de
a gestiona structuri de date diverse și imbricate și de a oferi capabilități eficiente de interogare.
Această flexibilitate face din bazele de date orientate pe documente o alegere potrivită pentru
aplicațiile cu cerințe în schimbare și structuri de date complexe.
Perechi cheie-valoare, documente JSON/BSON
Perechi cheie-valoare:
Structură: într-o structură de date pereche cheie-valoare, fiecare parte de date este asociată cu
un identificator unic cunoscut sub numele de cheie. Cheia este folosită pentru a prelua valoarea
corespunzătoare.
Cazuri de utilizare: colecțiile cheie-valoare sunt adesea simple și eficiente, făcându-le potrivite
pentru scenarii în care accesul rapid și direct la date este crucial. Aceste baze de date sunt
utilizate în mod obișnuit pentru stocarea în cache și stocarea metadatelor.
Baze de Date Orientate pe Documente
Documente JSON/BSON:
Structura:
JSON (JavaScript Object Notation): un format pentru schimb de date care utilizează un format
de text ușor de înțeles și ușor de citit. Acceptă tipuri de date, cum ar fi obiecte, vectori, șiruri de
caractere, numere, valori booleene și nul.
BSON (JSON binar): o serializare codificată binar a documentelor asemănătoare JSON. BSON
extinde JSON pentru a include tipuri de date suplimentare, cum ar fi datele binare și tipul date,
făcându-l mai eficient pentru stocare și schimb de date.
Cazuri de utilizare: documentele JSON/BSON sunt structura de date primară în bazele de date
orientate pe documente. Fiecare document este o unitate autonomă care reprezintă un set de
perechi cheie-valoare, unde cheile sunt nume de câmpuri, iar valorile pot fi simple tipuri de
date, vectori, documente imbricate sau o combinație a acestora.
Baze de Date Orientate pe Documente
CMS: utilizate pentru a stoca și gestiona conținut, cum ar fi articole, bloguri și multimedia.
Schema flexibilă permite modificarea și adăugarea ușoară a atributelor în conținut.
Cataloage și informații despre produse: potrivite pentru a stoca informații despre produse,
inclusiv detalii precum specificațiile produsului, imaginile și recenziile utilizatorilor. Capacitatea
de a găzdui diferite tipuri de produse cu atribute diferite este potrivită în acest context.
Profiluri utilizator și date clienți: potrivite pentru stocarea profilurilor de utilizator și a datelor
clienților. Profilurile de utilizator au adesea atribute diferite; permite adăugarea sau eliminarea
dinamică a câmpurilor.
Analytics în timp real: utilizat în scenarii în care analiza în timp real este crucială, cum ar fi
monitorizarea și analizarea comportamentului utilizatorilor, a datelor de clicks sau a datelor de
la senzori.
Loguri și evenimente: utilizate pentru a stoca fișiere jurnal și date despre evenimente generate
de aplicații și sisteme. Schema flexibilă permite stocarea diferitelor formate și structuri de log
fără a fi nevoie de tabele predefinite.
Baze de Date Orientate pe Documente
Aplicații colaborative: utilizatorii contribuie cu conținut cu structuri diferite.
Mobile App Backend: servește ca stocare backend pentru aplicațiile mobile. Oferă flexibilitatea de
a gestiona diferite tipuri de date pe care aplicațiile mobile le pot genera sau consuma.
IoT (Internet of Things): aplicațiile IoT generează volume mari de date de la senzori și dispozitive.
Permite adaptarea ușoară la modificările configurațiilor dispozitivului sau formatelor de date.
Motoare de recomandare: acceptă stocarea preferințelor utilizatorului, comportamentelor și
interacțiunilor istorice. Aceste date sunt apoi folosite pentru a alimenta motoare de personalizare
și recomandare, oferind conținut personalizat sau sugestii de produse.
Prototiparea și dezvoltarea rapidă: sunt adesea alese pentru prototipare și dezvoltare rapidă
datorită naturii lor fără schemă. Dezvoltatorii pot repeta rapid, fără a fi nevoie de o proiectare
extinsă a schemei și de migrări.
Aplicații multi-tenant: pot exista cerințe diferite de stocare de date. Datele fiecăruia pot fi
reprezentate în documente cu structuri diferite.
Baze de Date Orientate pe Documente
MongoDB și Elasticsearch sunt baze de date orientate pe documente populare, dar ele servesc
scopuri principale diferite și sunt adesea folosite în contexte diferite.

MongoDB: Elasticsearch:
● Design flexibil al schemei ● Căutare full-text și analiză text
● Limbajul de interogare puternic ● Scalabilitate și performanță
● Scalabilitate orizontală ● Analiza datelor în timp real
● Ușurință în utilizare ● Framework de agregare
● Cazuri de utilizare: sisteme de ● Gestionarea datelor de log și
evenimente
management al conținutului, platforme
● Cazuri de utilizare: aplicații centrate pe
de comerț electronic, backend-uri
căutare, inclusiv căutare în comerț
pentru aplicații mobile, analize în timp
electronic, descoperire de conținut și
real
căutare enterprise
MongoDB

● MongoDB este o bază de date multiplatformă, orientată pe documente, care


oferă performanță ridicată, disponibilitate ridicată și scalabilitate ușoară.
● Utilizează conceptul de colecție și document. Baza de date este un container
fizic pentru colecții. Fiecare bază de date are propriul set de fișiere în sistemul
de fișiere. Un singur server MongoDB are de obicei mai multe baze de date.
● Colecția este un grup de documente MongoDB (echivalentul unui tabel). O
colecție poate aparține unei singure baze de date. Nu se impune o schemă.
● Documentele dintr-o colecție pot avea câmpuri diferite. Un document este un
set de perechi cheie-valoare.
Arhitectura MongoDB

source: mongodb.com
Documente
O decizie importantă în proiectarea modelelor de date este structura documentelor și modul în
care aplicația reprezintă relațiile dintre date. Există 2 moduri de a reprezenta aceste relații:
● referințe: stochează relațiile dintre date prin includerea de legături sau referințe de la un
document la altul
● documente imbricate: stocarea datelor aferente într-o singură structură de document.
Documentele MongoDB fac posibilă încorporarea structurilor documentelor într-un câmp
sau un vector în cadrul unui document
Documente
Datele sunt stocate în documente: structuri de date în stil JSON compuse din perechi cheie și
valoare.
Pe disc, documentele sunt stocate în formatul de serializare BSON. BSON este o
reprezentare binară a documentelor JSON, deși conține mai multe tipuri de date decât JSON
Documente

source: mongodb.com
Relații
1 la 1 cu imbricare
Relații
1 la N cu imbricare
Relații
1 la N cu referințe
Relații
1 la N cu referințe
Interogări - Read
Interogările în MongoDB se realizează utilizând limbajul de interogare MongoDB (MQL) și
implică specificarea condițiilor pentru a prelua documente din colecții pe baza anumitor criterii.
MongoDB oferă un set bogat de operatori de interogare și metode pentru filtrarea, sortarea și
proiecția datelor.
Operațiile de citire includ toate operațiunile care returnează un cursor ca răspuns la interogări
și, suplimentar, includ o serie de operațiuni de agregare care nu returnează un cursor, dar au
proprietăți similare cu interogările. Aceste comenzi includ aggregate, count și distinct.
În shell-ul mongo există metodele find() și findOne() ce sunt utilizate pentru operații de
citire.
Interogări - Read
Interogări - Read
Interogări - Write
Operațiile de scriere sunt atomice (la nivel de document);
O operație de scriere poate afecta atomic un singur document și o singură colecție.
Operațiile care modifică mai mult de un singur document dintr-o colecție acționează doar pe
un document la un moment dat.
Un model de date denormalizate cu date imbricate facilitează operațiunile de scriere atomică,
deoarece o singură operație de scriere poate insera sau actualiza datele pentru o entitate.
Într-un model normalizat, datele ar fi împărțite în mai multe colecții și ar necesita mai multe
operații de scriere care nu sunt atomice colectiv.
Interogări - Write
● Insert: adăugare de date noi
într-o colecție

● Update: modificări de date


(se pot specifica și criterii)

● Remove: ștergere de date


(se pot specifica și criterii)
Write Concern
Garanția oferită la raportarea execuției cu succes a unei operațiuni de scriere.
Modul de configurare “write concern” determină nivelul de garanție. (similar nivelului de
izolare).
La operațiunile de scriere care au “write concern” slab, acestea se execută rapid. În unele
cazuri de eșec, operațiunile de scriere lansate cu “write concern” slab, pot să nu fie
persistente.
Cu “write concern” mai puternic, aplicația client trebuie să aștepte mai mult pentru confirmarea
operațiunilor de scriere.
MongoDB oferă niveluri de “write concern” diferite pentru a se potrivi diverselor nevoil. “Write
concern” poate fi ajustat pentru a satisface nevoile de performanță sau persistență.
Implicit este „Acknowledged”
Write Concern - Unacknowledged
În acest mod MongoDB nu trimite confirmarea operației de scriere.
Write Concern - Acknowledged
În acest mod MongoDB confirmă primirea cererii de scriere și salvarea în memorie a operației
de scriere.
Write Concern - Journaled
În acest mod MongoDB confirmă primirea cererii de scriere doar după salvarea operației de
scriere în fițierul de log. Acest lucru asigură faptul că se poate restaura starea după un
shutdown sau întrerupere de tensiune
Write Concern – Replica Acknowledged
În acest mod MongoDB garantează că
operația de scriere se propagă la
toate componentele unui replica set
Agregări
Operațiunile de agregare procesează mai multe documente și returnează rezultate calculate.
Sunt utile pentru:
● Gruparea valorilor din mai multe documente.
● Operațiuni pe datele grupate pentru a returna un singur rezultat.
● Analiza modificărilor în timp a datelor.
Pentru operațiuni de agregare se pot utiliza:
● Pipe-uri de agregare (metoda recomandată).
● Metode de agregare cu un singur scop (sunt simple, dar nu au capabilitățile unui pipe).
Agregări – Pipe-uri
Un pipe de agregare constă din una sau mai multe etape de procesare a documentelor:
● Fiecare etapă realizează o operație asupra documentelor de intrare: filtrare, grupare,
calcul de valori.
● Documentele generate într-o etapă sunt trimise către etapa următoare.
● Un pipe de agregare poate returna rezultate pentru grupuri de documente: valoarea totale,
media, maximul, minimul.
● Se pot efectua operații asupra colecțiilor stocate în shard-uri
● Exista limitări pentru dimensiunea rezultatului, a numărului de pași (stages) și a
dimensiunii memoriei utilizate
Agregări – Pipe-uri
Agregări – Funcții Uniscop
Metode de agregare cu un singur scop (sunt simple, dar nu au capabilitățile unui pipe):
● db.collection.estimateDocumentCount(): Furnizează un total aproximativ al
documentelor dintr-o colecție
● db.collection.count(): Furnizează numărul de documente dintr-o colecție
● db.collection.distinct(): Furnizează un vector de documente ce au valori
distincte pentru câmpul specificat
Map - Reduce
Este o paradigmă de procesare a
volumelor mari de date și
generare de agregări

Se aplică funcția map() fiecărui


document de intarare și emite
perechi cheie-valoare.

În etapa de reduce() se agregă


valorile multiple pentru aceeași
cheie.

S-ar putea să vă placă și