1.1 Cum funcționează o bază de date NoSQL

Bazele de date NoSQL folosesc o varietate de modele de date pentru a accesa și manipula datele. Aceste tipuri de baze de date sunt optimizate pentru aplicații cu consum mare de date care necesită o latență redusă și modele de date flexibile. Toate acestea se realizează prin atenuarea cerințelor stricte de consistență a datelor care sunt tipice pentru alte tipuri de baze de date.

Luați în considerare un exemplu de modelare a schemei pentru o bază de date simplă de cărți.

  • Într-o bază de date relațională, o înregistrare de carte este adesea împărțită în mai multe părți (sau „normalizată”) și stocată în tabele separate ale căror relații sunt definite de constrângeri de cheie primară și străină. În acest exemplu, tabelul Cărți are coloanele ISBN , Titlul cărții și „ISBN”și„Author”Author-ISBN, iarAuthor NameșiAuthor IDcoloaneleAuthorstabeluledițieiNumărul. Modelul relațional este conceput pentru a menține integritatea referențială între tabelele dintr-o bază de date. Datele sunt normalizate pentru a reduce redundanța și sunt în general optimizate pentru stocare.

  • Într-o bază de date NoSQL, o înregistrare de carte este de obicei stocată ca document JSON. Pentru fiecare carte sau element, valorile ISBN , Titlul cărții , Numărul ediției , Numele autorului și ID-ul autorului sunt stocate ca atribute într-un singur document. În acest model, datele sunt optimizate pentru dezvoltare intuitivă și scalabilitate orizontală.

1.2 Pentru ce pot fi folosite bazele de date NoSQL?

Bazele de date NoSQL sunt potrivite pentru multe aplicații moderne, cum ar fi aplicații mobile, de jocuri, web, care necesită baze de date flexibile, scalabile, cu performanțe ridicate și funcționalități bogate, care pot oferi o utilizare maximă.

  • Flexibilitate . De obicei, bazele de date NoSQL oferă scheme flexibile, permițând o dezvoltare mai rapidă și permițând implementarea incrementală. Datorită utilizării modelelor de date flexibile, bazele de date NoSQL sunt potrivite pentru date semi-structurate și nestructurate.

  • Scalabilitate . Bazele de date NoSQL sunt concepute pentru a scala folosind clustere hardware distribuite, nu prin adăugarea de servere scumpe și de încredere. Unii furnizori de servicii cloud rulează aceste operațiuni în fundal, oferind un serviciu complet gestionat.

  • Performanță ridicată . Bazele de date NoSQL sunt optimizate pentru modele de date specifice și modele de acces pentru a obține performanțe mai mari decât bazele de date relaționale.

  • Funcționalitate largă . Bazele de date NoSQL oferă API-uri bogate și tipuri de date care sunt concepute special pentru modelele lor de date respective.

1.3 Tipuri de baze de date NoSQL

Bazele de date NoSQL sunt folosite acolo unde nu este foarte convenabil să stocați date sub formă de tabele. Prin urmare, acestea sunt stocate în formate foarte diferite. De obicei, există 6 tipuri principale de date ale bazelor de date NoSQL.

DB bazat pe perechi cheie-valoare

Bazele de date care utilizează perechi cheie-valoare acceptă separabilitate ridicată și oferă o scalare orizontală fără precedent, care nu poate fi realizată cu alte tipuri de baze de date. Cazurile de utilizare bune pentru bazele de date cheie-valoare sunt jocurile, publicitatea și aplicațiile IoT.

De exemplu, Amazon DynamoDB asigură funcționarea stabilă a bazei de date cu o întârziere de cel mult câteva milisecunde la orice scară. Această performanță robustă a fost motivul principal pentru migrarea Snapchat Stories la DynamoDB, deoarece această caracteristică Snapchat este asociată cu cea mai mare încărcare de scriere de stocare.

Document

În codul aplicației, datele sunt adesea reprezentate ca un obiect sau document într-un format asemănător JSON, deoarece este un model de date eficient și intuitiv pentru dezvoltatori. Bazele de date de documente permit dezvoltatorilor să stocheze și să interogheze date într-o bază de date folosind același model de document pe care îl folosesc în codul aplicației lor. Natura flexibilă, semi-structurată și ierarhică a documentelor și a bazelor de date de documente le permite să evolueze cu nevoile aplicației.

Modelul de document funcționează bine în cataloage, profiluri de utilizator și sisteme de management al conținutului în care fiecare document este unic și se modifică în timp. Amazon DocumentDB (compatibil cu MongoDB) și MongoDB sunt baze de date comune de documente care oferă API-uri funcționale și intuitive pentru dezvoltarea agilă.

Baze de date grafice

Bazele de date grafice facilitează dezvoltarea și rularea aplicațiilor care funcționează cu seturi de date complexe. Exemple tipice de utilizare a bazelor de date cu grafice sunt rețelele sociale, serviciile de recomandare, sistemele de detectare a fraudelor și graficele de cunoștințe. Amazon Neptune este un serviciu de baze de date grafice complet gestionat. Neptune acceptă Property Graph and Resource Description Framework (RDF), oferind două API-uri grafice din care să alegeți: TinkerPop și RDF/SPARQL. Bazele de date cu grafice comune includ Neo4j și Giraph.

DB în memorie

Adesea, aplicațiile de jocuri și de publicitate folosesc clasamente, stocarea sesiunilor și analize în timp real. Astfel de capabilități necesită un răspuns în câteva microsecunde, în timp ce o creștere bruscă a traficului este posibilă în orice moment.

Amazon MemoryDB pentru Redis este un serviciu de baze de date în memorie compatibil cu Redis, care reduce latența de citire la milisecunde și oferă durabilitate în mai multe zone de disponibilitate. MemoryDB este creat special pentru performanță și fiabilitate ultra-înaltă, astfel încât poate fi folosit ca bază de date principală pentru aplicațiile moderne bazate pe microservicii.

Amazon ElastiCache este un serviciu de stocare în cache în memorie compatibil cu Redis și Memcached complet gestionat pentru a servi sarcini de lucru cu latență scăzută și debit mare. Clienți precum Tinder, care au nevoie de aplicațiile lor să răspundă în timp real, folosesc mai degrabă sistemele în memorie decât sistemele de stocare pe disc. Un alt exemplu de depozit de date special creat este Amazon DynamoDB Accelerator (DAX). DAX permite DynamoDB să citească datele de câteva ori mai rapid.

Căutați baze de date

Multe aplicații generează jurnale pentru a facilita depanarea și rezolvarea problemelor de către dezvoltatori. Amazon OpenSearch este un serviciu creat special pentru vizualizarea și analiza în timp aproape real a fluxurilor de date generate automat prin indexarea, agregarea și căutarea în jurnalele și valorile semi-structurate.

În plus, Amazon OpenSearch este un serviciu de căutare full-text puternic, de înaltă performanță. Expedia folosește peste 150 de domenii de servicii Amazon OpenSearch, 30 TB de date și 30 de miliarde de documente pentru o varietate de cazuri de utilizare critice, de la monitorizarea operațională și depanarea până la urmărirea stivei de aplicații distribuite și optimizarea costurilor.

1.4 Compararea bazelor de date SQL (relaționale) și NoSQL (non-relaționale).

NoSQL are multe avantaje, așa că ar trebui să știți cel puțin teoretic că instrumentul de care aveți nevoie există deja înainte de a-l scrie singur. Mai jos voi oferi o comparație a bazelor de date NoSQL și SQL:

Sarcini de lucru adecvate

Bazele de date relaționale sunt concepute pentru aplicații tranzacționale și foarte consistente de procesare a tranzacțiilor în timp real (OLTP) și sunt potrivite pentru procesarea analitică în timp real (OLAP).

Bazele de date NoSQL sunt concepute pentru a funcționa cu o serie de modele de acces la date, inclusiv aplicații cu latență scăzută. Bazele de date de căutare NoSQL sunt concepute pentru analiza datelor semi-structurate.

Model de date

Modelul relațional normalizează datele și le transformă în tabele de rânduri și coloane. O schemă definește în mod rigid tabele, rânduri, coloane, indecși, relații dintre tabele și alte elemente ale bazei de date. O astfel de bază de date asigură integritatea datelor de referință în relațiile dintre tabele.

Bazele de date NoSQL oferă o varietate de modele de date, cum ar fi perechi cheie-valoare, documente și grafice, care sunt optimizate pentru performanță și scalabilitate ridicate.

Proprietăți ACID

Bazele de date relaționale oferă un set de proprietăți ACID: atomicitate, consistență, izolare, fiabilitate.

  • Atomicitatea necesită ca o tranzacție să fie executată în întregime sau deloc.
  • Consecvența înseamnă că, de îndată ce o tranzacție se încheie, datele trebuie să se conformeze schemei bazei de date.
  • Izolarea necesită ca tranzacțiile paralele să se desfășoare separat unele de altele.
  • Fiabilitatea se referă la capacitatea de a reveni la ultima stare salvată după o defecțiune neașteptată a sistemului sau o întrerupere de curent.

Bazele de date NoSQL oferă adesea un compromis, relaxând cerințele rigide ale proprietăților ACID în favoarea unui model de date mai flexibil care permite scalarea orizontală. Acest lucru face din NoSQL o alegere excelentă pentru cazurile de utilizare cu lățime de bandă mare și cu latență scăzută care necesită scalare orizontală dincolo de o singură instanță.

Performanţă

Performanța depinde în principal de subsistemul discului. Optimizarea interogărilor, indexurilor și structurii tabelelor este adesea necesară pentru performanță maximă.

Performanța depinde de obicei de dimensiunea clusterului hardware de bază, de latența rețelei și de aplicația care apelează.

Scalare

Bazele de date relaționale se scalează de obicei prin creșterea puterii de calcul a hardware-ului sau prin adăugarea de copii separate pentru sarcinile de lucru de citire.

Bazele de date NoSQL acceptă în mod obișnuit separabilitate ridicată prin modele de acces scalabile bazate pe o arhitectură distribuită. Acest lucru îmbunătățește debitul și oferă performanțe consistente la o scară aproape nelimitată.

API

Solicitările pentru scrierea și preluarea datelor sunt scrise în SQL. Aceste interogări sunt analizate și executate de o bază de date relațională.

API-urile orientate pe obiecte permit dezvoltatorilor de aplicații să scrie și să recupereze cu ușurință structuri de date. Folosind chei de partiție, aplicațiile pot căuta perechi cheie-valoare, seturi de coloane sau documente semi-structurate care conțin obiecte seriale și atribute ale aplicației.