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:
- Coloana largă : Azure Cosmos DB , Accumulo , Cassandra , ScyllaDB , HBase .
- Document : Azure Cosmos DB , Apache CouchDB , ArangoDB , BaseX , Clusterpoint , Couchbase , eXist-db , IBM Domino , MarkLogic , MongoDB , OrientDB , Qizx , RethinkDB
- Valoare cheie : Azure Cosmos DB , Aerospike , Apache Ignite , ArangoDB , Berkeley DB , Couchbase , Dynamo , FoundationDB , InfinityDB , MemcacheDB , MUMPS , Oracle NoSQL Database , OrientDB , Redis , Riak , SciDB , SDBM / Flat File dbm , ZooKeeper
- Grafic : Azure Cosmos DB , AllegroGraph , ArangoDB , InfiniteGraph , Apache Giraph , MarkLogic , Neo4J , AgensGraph , OrientDB , Virtuoso
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
- db4o
- GemStone / S
- InterSystems Caché
- JAD
- ObjectDatabase ++
- ObjectDB
- Obiectivitate / DB
- ObjectStore
- ODABA
- Prest
- Tărâm
- OpenLink Virtuoso
- Baza de date Versant Object
- ZODB
Tabular
Magazin tuple
- Râul Apache
- GigaSpaces
- Tarantool
- TIBCO ActiveSpaces
- OpenLink Virtuoso
Baza de date triplu / quad (RDF)
- AllegroGraph
- Apache JENA (Este un cadru, nu o bază de date)
- MarkLogic
- Ontotext-OWLIM
- Baza de date Oracle NoSQL
- Profium Sense
- Virtual Server universal
Găzduit
- Azure Cosmos DB
- Amazon DynamoDB
- Amazon DocumentDB
- Amazon SimpleDB
- Baza de date Clusterpoint
- Strat de date Cloudant (CouchDB)
- Freebase
- Google Cloud Datastore
- Servicii de stocare Microsoft Azure
- OpenLink Virtuoso
- Atlas MongoDB
Baze de date cu mai multe valori
- D3 Alegeți baza de date
- Motor de stocare extensibil (ESE / NT)
- InfinityDB
- InterSystems Caché
- baza de date jBASE Pick
- Software-ul mvBase Rocket
- Software-ul mvEnterprise Rocket
- Northgate Information Solutions Reality, baza de date originală Pick / MV
- OpenQM
- Revelation Software OpenInsight (Windows) și Advanced Revelation (DOS)
- UniData Rocket U2
- UniVerse Rocket U2
Baza de date multimodel
- Azure Cosmos DB
- Apache Ignite
- ArangoDB
- Couchbase
- FoundationDB
- MarkLogic
- OrientDB
- Baza de date Oracle
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
- Teorema CAP
- Compararea sistemelor de gestionare a bazelor de date de obiecte
- Compararea software-ului de stocare structurat
- Baza de date de corelație
- C ++
- Scalabilitatea bazei de date
- Memorie cache distribuită
- Căutare fațetată
- Baza de date MultiValue
- Baza de date multi-model
- Triplestore
- Baze de date schemă-agnostice
Referințe
Lecturi suplimentare
- Sadalage, Pramod; Fowler, Martin (2012). NoSQL Distilled: Un scurt ghid pentru lumea emergentă a persistenței poliglote . Addison-Wesley. ISBN 978-0-321-82662-6.
- McCreary, Dan; Kelly, Ann (2013). Sensibilizarea NoSQL: Un ghid pentru manageri și pentru noi . ISBN 9781617291074.
- Wiese, Lena (2015). Management avansat de date pentru SQL, NoSQL, Cloud și baze de date distribuite . DeGruyter / Oldenbourg. ISBN 978-3-11-044140-6.
- Strauch, Christof (2012). „Baze de date NoSQL” (PDF) .
-
Moniruzzaman, AB; Hossain, SA (2013). „Baza de date NoSQL: Noua eră a bazelor de date pentru analiza datelor mari - clasificare, caracteristici și comparație”. arXiv : 1307.0191 . Bibcode : 2013arXiv1307.0191M . Citați jurnalul necesită
|journal=( ajutor ) -
Orend, Kai (2013). „Analiza și clasificarea bazelor de date NoSQL și evaluarea capacității lor de a înlocui un strat de persistență relațional obiect”. CiteSeerX 10.1.1.184.483 . Citați jurnalul necesită
|journal=( ajutor ) - Krishnan, Ganesh; Kulkarni, Sarang; Dadbhawala, Dharmesh Kirit. „Metodă și sistem pentru partajarea versiunilor, consolidarea și raportarea informațiilor” .
linkuri externe
- Strauch, Christoph. „Carte albă NoSQL” (PDF) . Stuttgart: Hochschule der Medien.
- Edlich, Ștefan. "Lista bazei de date NoSQL" .
- Neubauer, Peter (2010). „Baze de date grafice, NOSQL și Neo4j” .
- Bushik, Sergey (2012). „O comparație independentă de furnizor a bazelor de date NoSQL: Cassandra, HBase, MongoDB, Riak” . NetworkWorld.
- Zicari, Roberto V. (2014). „Magazin de date NoSQL - articole, lucrări, prezentări” . odbms.org .