Quali sono le differenze tra NoSQL e un RDBMS tradizionale?


71

Quali sono le differenze tra NoSQL e un RDBMS tradizionale?

Negli ultimi mesi, NoSQL è stato spesso menzionato nelle notizie tecniche. Quali sono le sue caratteristiche più significative rispetto a un RDBMS tradizionale? A quale livello (fisico, logico) si verificano le differenze?

Dove sono i posti migliori per usare NoSQL? Perché?

Risposte:


61

NoSQL significa "Non solo SQL" e di solito significa che il database non è un database relazionale, che è stato molto popolare negli ultimi decenni.

Il motivo per cui NoSQL è stato così popolare negli ultimi anni è principalmente perché, quando un database relazionale cresce da un server, non è più così facile da usare. In altre parole, non si adattano molto bene in un sistema distribuito. Tutti i grandi siti di cui hai parlato Google, Yahoo, Facebook e Amazon (non so molto su Digg) contengono molti dati e li archiviano in sistemi distribuiti per diversi motivi. È possibile che i dati non si adattino a un server o che vi siano requisiti per l'alta disponibilità .

Teorema della PAC

Le proprietà di un sistema distribuito possono essere descritte dal teorema CAP . Delle tre proprietà puoi avere solo un massimo di due:

  • C OERENZA
  • Una disponibilità
  • tolleranza alla rete P artitioning

Amazon Dynamo utilizza Eventual Coistency per avvicinarsi per ottenere tutte e tre le proprietà. L'articolo Dynamo: lo store di valori-chiave altamente disponibili di Amazon vale la pena leggere quando si impara a conoscere i database NoSQL e i sistemi distribuiti. Amazon Dynamo ha le proprietà A e P.

Google ha un approccio diverso con BigTable , che ha le proprietà C e A.

Altri database NoSQL

Come ho scritto all'inizio, ci sono molti altri tipi di database NoSQL, progettati per requisiti diversi. Ad esempio database grafici come Neo4j , database di documenti come CouchDB e database multimodel / oggetti come OrientDB .

Infine, vorrei dire che i database relazionali rimarranno popolari. Sono molto flessibili e mantenibili. Ma non sono sempre la scelta migliore.


1
Buona, esaustiva risposta.
TML

NoSQL NON significa non relazionale, significa solo qualcosa di diverso da un DBMS SQL.
nvogel

1
Sembra che alla recente conferenza O'Reilly Strata, Mark Madsen abbia coniato una nuova interpretazione di "NoSQL" nella sua storia di database in sostituzione di "Not Only SQL". Ora è: "No, SQL" ;-)
Lukas Eder,

6
"Non solo" era un retrofit, il primo movimento NoSQL era rabbiosamente contro i database relazionali. Quindi hanno colpito il mondo reale.
Gaius,

22

NoSQL è un termine molto ampio e in genere viene indicato come "Non solo SQL". Il termine sta perdendo favore nella comunità non RDBMS.

Scoprirai che il database NoSQL ha poche caratteristiche comuni. Possono essere approssimativamente divisi in alcune categorie:

  • negozi chiave / valore
  • Database ispirati a Bigtable (basato sul documento Google Bigtable)
  • Database ispirati alla dinamo
  • database distribuiti
  • database di documenti

Questa è una domanda enorme, ma ha una risposta abbastanza buona in questo sondaggio sui database distribuiti .

Per una breve risposta:

I database NoSQL possono rinunciare a varie parti di ACID al fine di ottenere alcuni altri vantaggi: tolleranza della partizione, prestazioni, distribuzione del carico o ridimensionamento lineare con l'aggiunta di nuovo hardware.

Per quanto riguarda quando usarli, questo dipende interamente dalle esigenze della tua applicazione.


12

NoSQL è un tipo di database che non ha uno schema fisso come un RDBMS tradizionale. Con i database NoSQL lo schema è definito dallo sviluppatore in fase di esecuzione. Non scrivono le normali istruzioni SQL sul database, ma usano invece un'API per ottenere i dati di cui hanno bisogno. I database NoSQL possono di solito scalare facilmente tra diversi server fisici senza bisogno di sapere su quale server si trovano i dati che stai cercando.

Tuttavia, ci sono alcuni compromessi per tutta questa flessibilità: i database NoSQL sono carenti di funzionalità rispetto ai sistemi RDBMS come SQL Server, Oracle, DB2, MySQL, ecc. Non c'è Service Broker, registrazione delle transazioni, pacchetti ETL, ecc.

NoSQL non è qualcosa di nuovo. In realtà esiste da 50-60 anni. All'epoca si chiamava COBOL. Stessa idea esatta, solo un gruppo diverso ne è uscito.


3
Il punto 1 non è corretto per molti (tutti?) Database NoSQL a meno che non sia stato esplicitamente detto al database che non ti interessa se le scritture hanno esito positivo. Ad esempio, qualsiasi database supportato da Hadoop scriverà i dati in tre posizioni come l'inferno o l'acqua alta. Per impostazione predefinita, Cassandra scriverà in tre posizioni e riconoscerà la scrittura come riuscita quando due hanno avuto successo.
Jeremiah Peschka,

3
Come gestisce la concorrenza durante questi aggiornamenti? Esiste una transazione di tipo distribuito tra loro o la scrittura ACK viene eseguita prima e i server gestiscono il resto in background?
mrdenny,

La concorrenza dipende interamente dall'implementazione. Riak utilizza orologi vettoriali per garantire la concorrenza e in caso di scritture contrastanti possono essere restituiti all'applicazione chiamante per la risoluzione. Altri usano un'ultima scrittura vinta.
Jeremiah Peschka,

Per quanto riguarda il riconoscimento della scrittura - nella maggior parte dei casi, le scritture non vengono riconosciute fino a quando il sistema operativo non riconosce la scrittura. Puoi persino arrivare al punto di richiedere il riconoscimento di scritture permanenti, il che significa che i bit vengono effettivamente scaricati su disco anziché essere nel buffer del sistema operativo. MongoDB riconosce le scritture in memoria per impostazione predefinita, ma può essere configurato per richiedere il riconoscimento della scrittura su disco. La replica viene gestita in modo diverso con ogni prodotto. Con Hadoop, il client scrive sul server A che scrive su B che scrive su C. Una volta che C risponde, la scrittura è completa e il client riceve una scrittura ack.
Jeremiah Peschka,

In tal caso, sono corretto. Ho rimosso la dichiarazione errata. Ho fatto altro FUBAR?
mrdenny,

6

Fondamentalmente rinunciare alla configurazione relazionale, con chiavi primarie ed esterne, e con l'overhead aggiuntivo coinvolto nel mantenimento della sicurezza transazionale, spesso ti dà estremi aumenti nelle prestazioni. Tuttavia, ciò non è univoco per i nuovi database / archivi di dati, ad esempio MySQL è stato ottimizzato per funzionare a "livelli NoSQL" bypassando i livelli.

In breve, spesso puoi ottenere prestazioni impressionanti se sei d'accordo con il rischio di perdere i dati. La maggior parte dei sistemi NoSQL fa questo. Ad esempio MongoDB mette in scena le modifiche ai dati da scrivere quando è conveniente. I dati stessi sono sicuri e transazionali, ma conservati in una memoria volatile (memoria). Se perdi energia non puoi essere sicuro al 100% di non aver perso dati o di non avere dati danneggiati.

È un compromesso tra sicurezza e prestazioni.


5

Un buon punto di partenza è la voce di Wikipedia . In sostanza, invece, mettendo in relazione i dati in una tabella con un'altra, le cose vengono archiviate come coppie chiave-valore e non esiste uno schema di database, ma viene gestito invece nel codice.

Alcuni siti utilizzano contemporaneamente NoSQL e i tipici server RDBMS, ma per memorizzare dati diversi. Quindi non devi scegliere l'uno o l'altro.


Il fatto che la maggior parte di questa domanda possa essere risolta andando al WP mi fa strofinare il mento mentre contemplo le risposte qui. Penso che sia un po 'troppo "domanda di riempimento" ma è davvero tutto ciò che abbiamo in questo momento.
jcolebrand

1
La nota importante qui è che evitare il supporto delle relazioni (chiave esterna) nell'infrastruttura del database / server allevia il database / i server dal sovraccarico di gestione del carico e del blocco del mantenimento dell'integrità referenziale. La conseguenza di questo, il compromesso, è che l'integrità referenziale, la coerenza e le altre preoccupazioni ACID vengono quindi rimosse alle applicazioni. Molte applicazioni ne traggono vantaggio piuttosto che essere limitate da esso. (Alcune applicazioni devono essere integrate nel modello client / server).
Jim Dennis,

0

Ho lavorato molto sul database NoSQL e Oracle di MongoDB.

Schema

Il database SQL ha uno schema predefinito per l'archiviazione di dati strutturati.

Nel database NoSQL non esiste uno schema predefinito, qui lo schema è l'elemento più dinamico basato sugli elementi di dati.

scalabilità

I database SQL sono scalabili verticalmente, il che significa che se vogliamo ridimensionare il database di base SQL, dobbiamo dare un impulso hardware su cui è installato il sistema DBMS. Questo è dove a volte va per la limitazione della scalabilità.

I database NoSQL sono scalabili orizzontalmente, il che significa che se vogliamo ridimensionarlo, dobbiamo aggiungere più nodi e creare una rete di distribuzione in base alle nostre esigenze e alla potenza richiesta. Ecco come riducono il carico sul database

Recupero dei dati

Nei database basati su SQL, per definire e manipolare i dati possiamo usare SQL (Structured Query Language), che è molto potente al giorno d'oggi.

In termini di database NoSQL, le query si concentrano sulla raccolta e sui documenti. A volte si chiama UnQL (Unstructured Query Language). Questo è ancora in fase di evoluzione, quindi varia da fornitore a fornitore del database NoSQL.

Per ulteriori informazioni sulle differenze chiave, il mio blog: Differenza tra database SQL e NoSQL

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.