NoSQL - NoSQL

Un NoSQL (inițial referindu -se la „non- SQL “ sau „non-relaționale“) Baza de date oferă un mecanism pentru stocarea și regăsirea datelor care sunt modelate în alte domenii decât relațiile tabelare folosite în mijloace baze de date relaționale . Astfel de baze de date există de la sfârșitul anilor 1960, dar numele „NoSQL” a fost inventat doar la începutul secolului 21, declanșat de nevoile companiilor Web 2.0 . Bazele de date NoSQL sunt utilizate din ce în ce mai mult în aplicațiile web de date mari și în timp real . Sistemele NoSQL sunt numite uneori „Nu numai SQL” pentru a sublinia faptul că pot accepta limbaje de interogare de tip SQL sau pot sta alături de baze de date SQL în arhitecturi persistente poliglote .

Motivațiile pentru această abordare includ simplitatea proiectării , scalarea „orizontală” mai simplă la clustere de mașini (care este o problemă pentru bazele de date relaționale), un control mai fin asupra disponibilității și limitarea nepotrivirii impedanței obiect-relațională . Structurile de date utilizate de bazele de date NoSQL (de exemplu , perechea cheie-valoare , coloană largă , grafic sau document ) sunt diferite de cele utilizate în mod implicit în bazele de date relaționale, făcând unele operații mai rapide în NoSQL. Caracterul adecvat al unei baze de date NoSQL date depinde de problema pe care trebuie să o rezolve. Uneori, structurile de date utilizate de bazele de date NoSQL sunt, de asemenea, văzute ca „mai flexibile” decât tabelele de baze de date relaționale.

Multe magazine NoSQL compromit consistența (în sensul teoremei CAP ) în favoarea disponibilității, toleranței partiției și vitezei. Bariere în calea adoptării mai mari a magazinelor NoSQL includ utilizarea limbajelor de interogare de nivel scăzut (în loc de SQL, de exemplu), lipsa abilității de a efectua îmbinări ad hoc între tabele, lipsa interfețelor standardizate și investiții imense anterioare în bazele de date relaționale existente . Majoritatea magazinelor NoSQL nu au tranzacții ACID adevărate , deși câteva baze de date le-au făcut centrale pentru proiectele lor.

În schimb, majoritatea bazelor de date NoSQL oferă un concept de „ eventuală consistență ”, în care modificările bazei de date sunt propagate către toate nodurile „eventual” (de obicei în milisecunde), astfel încât interogările pentru date s-ar putea să nu returneze imediat datele actualizate sau ar putea duce la citirea datelor care sunt nu este exactă, o problemă cunoscută sub numele de stale citește. În plus, unele sisteme NoSQL pot prezenta scrieri pierdute și alte forme de pierdere a datelor . Unele sisteme NoSQL oferă concepte precum înregistrarea în avans pentru a evita pierderea datelor. Pentru procesarea tranzacțiilor distribuite pe mai multe baze de date, consistența datelor este o provocare și mai mare, care este dificilă atât pentru NoSQL, cât și pentru bazele de date relaționale. Bazele de date relaționale „nu permit constrângerile referențiale de integritate să se întindă pe bazele de date”. Puține sisteme mențin atât tranzacțiile ACID, cât și standardele X / Open XA pentru procesarea tranzacțiilor distribuite. Bazele de date relaționale interactive împărtășesc tehnicile conformaționale de analiză a relei ca o caracteristică comună. Limitările din mediul de interfață sunt depășite folosind protocoale de virtualizare semantice, astfel încât serviciile NoSQL să fie accesibile pentru majoritatea sistemelor de operare.

Istorie

Termenul NoSQL a fost folosit de Carlo Strozzi în 1998 pentru a-și numi baza de date relațională open-source Strozzi NoSQL, care nu expunea interfața standard Structured Query Language (SQL), dar era încă relațională. RDBMS-ul său NoSQL este distinct de conceptul general din jurul anului 2009 al bazelor de date NoSQL. Strozzi sugerează că, deoarece actuala mișcare NoSQL „se îndepărtează cu totul de modelul relațional, ar fi trebuit, așadar, să fie numită mai adecvat„ NoREL ””, referindu-se la „nu relațional”.

Johan Oskarsson, pe atunci dezvoltator la Last.fm , a reintrodus termenul NoSQL la începutul anului 2009 când a organizat un eveniment pentru a discuta despre „ baze de date distribuite open-source , non-relaționale ”. Numele a încercat să eticheteze apariția unui număr din ce în ce mai mare de magazine de date non-relaționale, distribuite, inclusiv clone open source ale Bigtable / MapReduce de la Google și DynamoDB de la Amazon .

Tipuri și exemple

Există diferite moduri de clasificare a bazelor de date NoSQL, cu diferite categorii și subcategorii, dintre care unele se suprapun. Ceea ce urmează este o clasificare de bază după modelul de date, cu exemple:

O clasificare mai detaliată este următoarea, bazată pe una de la Stephen Yen:

Tip Exemple remarcabile de acest tip
Memorie cache cheie-valoare Apache Ignite , Couchbase , Coherence , eXtreme Scale , Hazelcast , Infinispan , Memcached , Redis , Velocity
Magazin cheie-valoare Azure Cosmos DB , ArangoDB , Aerospike , Couchbase , Redis
Depozit cheie-valoare (eventual consecvent) Azure Cosmos DB , baza de date Oracle NoSQL , Dynamo , Riak , Voldemort
Magazin cheie-valoare (comandat) FoundationDB , InfinityDB , LMDB , MemcacheDB
Magazin tuple Râul Apache , GigaSpaces
Baza de date obiect Obiectivitate / DB , Prest , ZopeDB
Magazin de documente Azure Cosmos DB , ArangoDB , BaseX , Clusterpoint , Couchbase , CouchDB , DocumentDB , eXist-db , IBM Domino , MarkLogic , MongoDB , Qizx , RethinkDB , Elasticsearch
Magazin larg de coloane Azure Cosmos DB , Amazon DynamoDB , Bigtable , Cassandra , Google Cloud Datastore , HBase , Hypertable , ScyllaDB
Baza de date nativă multi-model ArangoDB , Azure Cosmos DB , OrientDB , MarkLogic

Bazele de date de corelație sunt independente de model și, în loc de stocare bazată pe rând sau pe coloană, utilizați stocare bazată pe valori.

Magazin cheie-valoare

Magazinele cheie-valoare (KV) utilizează matricea asociativă (numită și hartă sau dicționar) ca model de date fundamental. În acest model, datele sunt reprezentate ca o colecție de perechi cheie-valoare, astfel încât fiecare cheie posibilă apare cel mult o dată în colecție.

Modelul cheie-valoare este unul dintre cele mai simple modele de date non-banale, iar modelele de date mai bogate sunt adesea implementate ca o extensie a acestuia. Modelul cheie-valoare poate fi extins la un model ordonat discret, care menține cheile în ordine lexicografică . Această extensie este puternic din punct de vedere al calculului, în sensul că poate prelua în mod eficient intervale de chei selective .

Magazinele cheie-valoare pot utiliza modele de consistență variind de la eventuala consistență la serializabilitate . Unele baze de date acceptă comanda cheilor. Există diferite implementări hardware, iar unii utilizatori stochează date în memorie (RAM), în timp ce alții pe unități SSD (SSD) sau discuri rotative (aka hard disk drive (HDD)).

Magazin de documente

Conceptul central al unui magazin de documente este acela de „document”. În timp ce detaliile acestei definiții diferă între bazele de date orientate către documente, toate presupun că documentele încapsulează și codifică date (sau informații) în anumite formate sau codificări standard. Codurile utilizate sunt XML, YAML și JSON și forme binare precum BSON . Documentele sunt adresate în baza de date printr-o cheie unică care reprezintă acel document. O altă caracteristică definitorie a unei baze de date orientate către documente este un API sau un limbaj de interogare pentru a prelua documente pe baza conținutului acestora.

Implementări diferite oferă modalități diferite de organizare și / sau grupare a documentelor:

  • Colecții
  • Etichete
  • Metadate nevizibile
  • Ierarhii de directoare

În comparație cu bazele de date relaționale, colecțiile ar putea fi considerate analoage tabelelor și documentelor analoage înregistrărilor. Dar ele sunt diferite: fiecare înregistrare dintr-un tabel are aceeași succesiune de câmpuri, în timp ce documentele dintr-o colecție pot avea câmpuri complet diferite.

Grafic

Bazele de date grafice sunt concepute pentru date ale căror relații sunt bine reprezentate ca un grafic format din elemente conectate printr-un număr finit de relații. Exemple de date includ relații sociale, legături de transport public, hărți rutiere, topologii de rețea etc.

Baze de date grafice și limbajul lor de interogare
Nume Limbă (limbi) Note
AllegroGraph SPARQL Magazin triplu RDF
Amazon Neptun Gremlin , SPARQL Baza de date grafice
ArangoDB AQL, JavaScript , GraphQL Document SGBD multi-model , bază de date Grafic și depozit de valori-cheie
Azure Cosmos DB Gremlin Baza de date grafice
DEX / Sparksee C ++ , Java , C # , Python Baza de date grafice
FlockDB Scala Baza de date grafice
IBM DB2 SPARQL Magazin triplu RDF adăugat în DB2 10
InfiniteGraph Java Baza de date grafice
MarkLogic Java , JavaScript , SPARQL , XQuery Baza de date cu documente multi-model și magazin triplu RDF
Neo4j Cypher Baza de date grafice
OpenLink Virtuoso C ++ , C # , Java , SPARQL Middleware și motor de baze de date hibrid
Oracol SPARQL 1.1 Magazin triplu RDF adăugat în 11g
OrientDB Java , SQL Baza de date pentru documente și grafice multi-model
OWLIM Java , SPARQL 1.1 Magazin triplu RDF
Profium Sense Java , SPARQL Magazin triplu RDF
Sqrrl Enterprise Java Baza de date grafice

Baza de date obiect

Tabular

Magazin tuple

Baza de date triplu / quad (RDF)

Găzduit

Baze de date cu mai multe valori

Baza de date multimodel

Performanţă

Performanța bazelor de date NoSQL este de obicei evaluată folosind metrica debitului , care este măsurată ca operații / secundă. Evaluarea performanței trebuie să acorde atenție etaloanelor de referință corecte, cum ar fi configurațiile de producție, parametrii bazelor de date, volumul de date anticipat și sarcinile de lucru simultane ale utilizatorilor.

Ben Scofield a evaluat diferite categorii de baze de date NoSQL după cum urmează:

Modelul de date Performanţă Scalabilitate Flexibilitate Complexitate Funcționalitate
Magazin cheie-valoare înalt înalt înalt nici unul variabilă (niciuna)
Magazin orientat pe coloane înalt înalt moderat scăzut minim
Magazin orientat spre documente înalt variabil (mare) înalt scăzut variabil (scăzut)
Baza de date grafice variabil variabil înalt înalt teoria graficelor
Baza de date relațională variabil variabil scăzut moderat algebra relațională

Comparațiile de performanță și scalabilitate se fac cel mai frecvent utilizând etalonul YCSB .

Manipularea datelor relaționale

Deoarece majoritatea bazelor de date NoSQL nu au capacitatea de asociere în interogări, schema bazei de date trebuie, în general, să fie concepută diferit. Există trei tehnici principale pentru gestionarea datelor relaționale într-o bază de date NoSQL. (Vedeți tabelul Asociere și Asistență ACID pentru bazele de date NoSQL care acceptă asocierile.)

Interogări multiple

În loc să preluați toate datele cu o singură interogare, este obișnuit să faceți mai multe interogări pentru a obține datele dorite. Interogările NoSQL sunt adesea mai rapide decât interogările SQL tradiționale, astfel încât costul interogărilor suplimentare poate fi acceptabil. Dacă ar fi necesar un număr excesiv de interogări, una dintre celelalte două abordări este mai potrivită.

Memorarea în cache, replicare și date non-normalizate

În loc să stochezi doar chei străine, este obișnuit să stochezi valorile străine reale împreună cu datele modelului. De exemplu, fiecare comentariu de blog ar putea include numele de utilizator în plus față de un ID de utilizator, oferind astfel acces ușor la numele de utilizator fără a necesita o altă căutare. Cu toate acestea, atunci când un nume de utilizator se schimbă, acesta va trebui acum să fie schimbat în multe locuri din baza de date. Astfel această abordare funcționează mai bine atunci când citirile sunt mult mai frecvente decât scrierile.

Date cuibărire

Cu bazele de date de documente precum MongoDB, este obișnuit să puneți mai multe date într-un număr mai mic de colecții. De exemplu, într-o aplicație de blog, s-ar putea alege să stochezi comentarii în documentul postării blogului, astfel încât, cu o singură recuperare, să primească toate comentariile. Astfel, în această abordare, un singur document conține toate datele de care aveți nevoie pentru o anumită sarcină.

ACID și alăturați-vă asistenței

O bază de date este marcată ca acceptând proprietăți ACID (atomicitate, consistență, izolare, durabilitate) sau operațiuni de asociere , dacă documentația bazei de date face această afirmație. Cu toate acestea, acest lucru nu înseamnă neapărat că capacitatea este pe deplin acceptată într-un mod similar cu majoritatea bazelor de date SQL.

Bază de date ACID Se alătură
Aerospike da Nu
Apache Ignite da da
ArangoDB da da
Couchbase da da
CouchDB da da
Db2 da da
InfinityDB da Nu
LMDB da Nu
MarkLogic da da
MongoDB da da
OrientDB da da

Vezi si

Referințe

Lecturi suplimentare

linkuri externe