close

NoSQL

Vai alla navigazione Vai alla ricerca

NoSQL ( dall'inglese  non solo SQL  , non solo SQL ) è una designazione per un'ampia classe di sistemi di gestione di database eterogenei apparsi tra la fine degli anni 2000 e l'inizio degli anni 2010 e differiscono in modo significativo dai tradizionali DBMS relazionali con accesso ai dati tramite il linguaggio SQL . Si applica ai sistemi che tentano di risolvere problemi di scalabilità e disponibilità dovuti al rifiuto totale o parziale dei requisiti di atomicità e consistenza dei dati [1] .

Origine

Storia del nome

Inizialmente, la parola NoSQL era l'acronimo di due parole inglesi: No ("Not") e SQL (abbreviazione di English  Structured Query Language  - "structured query language"), che conferisce al termine il significato di "negare SQL" . È possibile che il primo che ha iniziato a usare questo termine volesse dire "No RDBMS" ("non un DBMS relazionale ") o "no relazionale" ("non relazionale"), ma NoSQL suonava meglio e alla fine ha messo radici (come un alternativa, è stato proposto anche NonRel). Successivamente, NoSQL è stato coniato la spiegazione "Not Only SQL" ("non solo SQL"). NoSQL è diventato un termine generico per vari database e archivi, ma non si riferisce a nessuna tecnologia o prodotto particolare [2] .

Sviluppo dell'idea

Di per sé l'idea dei database non relazionali non è nuova, e l'uso dello storage non relazionale risale ai tempi dei primi computer. I database non relazionali fiorirono durante i giorni del mainframe e in seguito, durante i giorni del dominio dei DBMS relazionali, trovarono impiego in negozi specializzati, come i servizi di directory gerarchiche . L'emergere di una nuova generazione di DBMS non relazionali era dovuto alla necessità di creare sistemi distribuiti paralleli per applicazioni Internet altamente scalabili come i motori di ricerca [2] .

All'inizio degli anni 2000, Google ha costruito il suo motore di ricerca altamente scalabile e le sue applicazioni: GMail , Google Maps , Google Earth , ecc., risolvendo i problemi di scalabilità ed elaborazione parallela di grandi quantità di dati. Il risultato è stato un file system distribuito e un sistema di coordinamento distribuito, un archivio della famiglia di colonne  , un ambiente di runtime basato sull'algoritmo MapReduce . La pubblicazione da parte di Google delle descrizioni di queste tecnologie ha suscitato un'ondata di interesse tra gli sviluppatori open source , con la conseguente creazione di Hadoop e il lancio di progetti correlati progettati per creare tecnologie simili a Google. Un anno dopo, nel 2007, Amazon.com ha seguito l'esempio di Google pubblicando articoli sul database ad alta disponibilità Amazon DynamoDB [3] .

Il supporto di colossi del settore in meno di cinque anni ha portato all'adozione diffusa di tecnologie NoSQL (e simili) per la gestione dei "big data", e altre aziende grandi e piccole si sono unite alla causa, come: IBM , Facebook , Netflix , eBay , Hulu , Yahoo! , con le sue soluzioni proprietarie e open source [3] .

Caratteristiche principali

I DBMS tradizionali sono guidati dai requisiti ACID per un sistema transazionale: atomicità ( atomicità ), consistenza ( coerenza inglese  ), isolamento ( isolamento inglese ), durabilità ( durabilità inglese ), mentre in NoSQL, al posto di ACID, può essere un insieme di proprietà BASE considerato [ 1] :    

  • disponibilità di base : è garantito il completamento di ogni richiesta (con o senza successo) . 
  • stato morbido : lo  stato del sistema può cambiare nel tempo, anche senza l'introduzione di nuovi dati, per ottenere la coerenza dei dati.
  • l' eventuale coerenza - i dati possono essere incoerenti per un po' di tempo, ma dopo un po' arrivano a un accordo . 

Il termine "BASE" è stato proposto da Eric Brewer, autore del teorema CAP , secondo il quale, nel calcolo distribuito, possono essere garantite solo due delle tre proprietà: consistenza dei dati, disponibilità o tolleranza della partizione [1] .

Naturalmente, i sistemi basati su BASE non possono essere utilizzati in tutte le applicazioni: per il funzionamento dei sistemi di cambio e bancari, l'uso delle transazioni è una necessità. Allo stesso tempo, le funzionalità ACID, per quanto desiderabili, sono quasi impossibili da ottenere in sistemi con un pubblico web multimilionario come amazon.com [1] . Pertanto, i progettisti di sistemi NoSQL sacrificano la consistenza dei dati per ottenere le altre due proprietà del teorema CAP [4] . Alcuni DBMS, come Riak , consentono di ottimizzare le caratteristiche di disponibilità-coerenza richieste anche per singole richieste specificando il numero di nodi necessari per confermare il successo di una transazione. [5]

Le soluzioni NoSQL differiscono non solo per la progettazione per il ridimensionamento. Altre caratteristiche salienti delle soluzioni NoSQL sono [6] [7] :

  • L'uso di vari tipi di archiviazione [6] .
  • Possibilità di progettare un database senza specificare uno schema [6] [7] .
  • Scalabilità lineare (l'aggiunta di processori aumenta le prestazioni) [6] .

Tipi di sistema

La descrizione dello schema dati nel caso di utilizzo di soluzioni NoSQL può essere effettuata attraverso l'utilizzo di varie strutture dati: tabelle hash , alberi e altre.

A seconda del modello di dati e degli approcci alla distribuzione e alla replica , ci sono quattro tipi principali di sistemi nel movimento NoSQL: "valore-chiave" ( archivio valori-chiave inglese  ), "famiglia di colonne" ( archivio famiglie di colonne ), documento -orientato ( archivio documenti ), grafico.

Chiave - valore

Il modello valore-chiave è l'opzione più semplice, utilizzando una chiave per accedere a un valore. Tali sistemi vengono utilizzati per l'archiviazione di immagini, file system specializzati, cache di oggetti e sistemi progettati per la scalabilità . Esempi di tali storage sono Berkeley DB , MemcacheDB [en] , Redis , Riak , Amazon DynamoDB [6] .

Famiglia di colonne

Un altro tipo di sistema è la "famiglia di colonne", il capostipite di questo tipo è il sistema Google BigTable . In tali sistemi, i dati vengono archiviati come una matrice sparsa le cui righe e colonne vengono utilizzate come chiavi. Un'applicazione tipica per questo tipo di DBMS è l'indicizzazione web , così come le attività di big data , con requisiti di coerenza ridotti . Esempi di questo tipo di DBMS sono: Apache HBase , Apache Cassandra , ScyllaDB [en] , Apache Accumulo [en] , Hypertable [en] [6] [8] .

I sistemi per famiglie di colonne e i sistemi orientati ai documenti hanno casi d'uso simili: sistemi di gestione dei contenuti, blog, registrazione degli eventi. L'uso dei timestamp consente di utilizzare questo tipo di sistema per l'organizzazione dei contatori, nonché per la registrazione e l'elaborazione di vari dati temporali [8] .

A differenza dell'archiviazione colonnare utilizzata in alcuni DBMS relazionali , che archiviano i dati per colonna in una forma compressa per l'efficienza negli scenari OLAP , il modello "famiglia di colonne" archivia i dati riga per riga e fornisce prestazioni elevate principalmente negli scenari operativi , mentre per le query che richiedono la scansione di una grande quantità di dati con l'aggregazione dei risultati, di norma, è inefficiente [8] [9] .

DBMS orientato ai documenti

I DBMS orientati ai documenti vengono utilizzati per archiviare strutture di dati gerarchiche. Trovano la loro applicazione nei sistemi di gestione dei contenuti , nell'editoria, nella ricerca documentaria . Esempi di questo tipo di DBMS sono CouchDB , Couchbase , MongoDB , eXist , Berkeley DB XML [6] .

Grafico DBMS

I DBMS grafici vengono utilizzati per attività in cui i dati hanno un numero elevato di collegamenti, ad esempio social network , rilevamento di frodi. Esempi: Neo4j , OrientDB , AllegroGraph [en] , Blazegraph [10] , InfiniteGraph , FlockDB , Titan [6] [8] .

Poiché i bordi del grafico sono materializzati , ovvero  memorizzati, l'attraversamento del grafico non richiede calcoli aggiuntivi (come un join in SQL ), ma sono necessari indici per trovare il vertice iniziale dell'attraversamento. I DBMS Graph generalmente supportano ACID e supportano anche linguaggi di query specializzati come Gremlin , Cypher , SPARQL , GraphQL .

UnQL

Nel luglio 2011, Couchbase, lo sviluppatore di CouchDB , Memcached e Membase , ha annunciato la creazione di un nuovo linguaggio di query simile a SQL  - UnQL (Unstructured Data Query Language). La creazione del nuovo linguaggio è stata eseguita dal creatore di SQLite Richard Hipp e dal fondatore del progetto CouchDB Damien Katz . Lo sviluppo è stato trasferito alla comunità come dominio pubblico [11] [12] [13] . L'ultima volta che UnQL è stato aggiornato nell'agosto 2011 [14] , infatti, il progetto non ha ricevuto alcun supporto.   

Note

  1. 1 2 3 4 Vaish, 2013 , Cos'è NoSQL e cosa non è.
  2. 1 2 Tiwari, 2011 , Capitolo 1: NoSQL: cos'è e perché ne hai bisogno > Definizione e introduzione.
  3. ^ 12 Tiwari , 2011 , pp. 4-6.
  4. ^ Brewer, Eric A. A Certain Freedom: Thoughts on the CAP Theorem  //  Atti del simposio IXXX ACM SIGACT-SIGOPS sui principi del calcolo distribuito. — N. Y .: ACM , 2010 . — Iss. 29 , n. 1 . - P. 335-336 . - ISBN 978-1-60558-888-9 . -doi : 10.1145/ 1835698.1835701 .
  5. ^ Zachary Kessin. Creazione di applicazioni Web con Erlang . - O'Reilly Media, Inc., 2012. - P.  13 . — 156p. - ISBN 978-1-4493-0996-1 .
  6. ^ 1 2 3 4 5 6 7 8 McCreary, Kelly, 2013 , 1.1. Cos'è NoSQL?
  7. ^ 1 2 Vaish, 2013 , Perché NoSQL?.
  8. ^ 1 2 3 4 Curato, Blin, 2014 .
  9. ^ McCreary, Kelly, 2013 , 4.3. Negozi della famiglia di colonne (Bigtable).
  10. ^ Blazegraph (precedentemente Bigdata) Archiviato il 13 giugno 2015 in Internet Archive . , w3c
  11. Linguaggio di query UnQL svelato da Couchbase e SQLite . Estratto 7 agosto 2011 . Archiviato dall'originale il 25 settembre 2011.
  12. Benvenuti nella home page di UnQL Specification . Estratto 7 agosto 2011 . Archiviato dall'originale il 25 settembre 2011.
  13. ^ I creatori di CouchDB e SQLite hanno introdotto UnQL, un analogo SQL per i sistemi NoSQL Archiviato il 14 settembre 2011 su Wayback Machine , notizie su OpenNet
  14. UnQL: sequenza temporale . unql.sqlite.org . Estratto il 18 ottobre 2021 . Archiviato dall'originale il 18 ottobre 2021.

Letteratura

  • Martin Fowler, Pramodkumar J. Sadalaj. NoSQL: una nuova metodologia per lo sviluppo di database non relazionali = NoSQL Distilled. - M .: "Williams" , 2013. - 192 p. - ISBN 978-5-8459-1829-1 .
  • Leonid Chernyak. Time of Troubles DBMS  // Sistemi aperti. - 2012. - N. 2 .
  • Dan McCreary, Ann Kelly. Dare un senso a NoSQL: una guida per i manager e il resto di noi. - Pubblicazioni Manning, 2013. - 312 p. - ISBN 978-1-61729-107-4 .
  • Olivier Cure, Guillaume Blin. Capitolo 2. Sistemi di gestione dei database // Sistemi di database RDF: triplica l'archiviazione e l'elaborazione delle query SPARQL. - Elsevier Science, 2014. - 256 p. - ISBN 978-0-12-800470-8 .
  • Shashank Tiwari. NoSQL professionale . - John Wiley & Sons Inc , 2011. - 384 pag. — ISBN 9780470942246 .

Collegamenti