Quando dovrei usare un database NoSQL invece di un database relazionale? Va bene usare entrambi sullo stesso sito?


141

Quali sono i vantaggi dell'utilizzo dei database NoSQL? Ho letto molto su di loro ultimamente, ma non sono ancora sicuro del motivo per cui vorrei implementarne uno e in quali circostanze vorrei usarne uno.

Risposte:


84

I database relazionali applicano ACID . Quindi, avrai archivi di dati orientati alle transazioni basati su schema. È testato e adatto per il 99% delle applicazioni del mondo reale. Puoi praticamente fare qualsiasi cosa con i database relazionali.

Tuttavia, ci sono limiti di velocità e ridimensionamento quando si tratta di enormi archivi di dati ad alta disponibilità. Ad esempio, Google e Amazon hanno terabyte di dati archiviati in grandi data center. La query e l'inserimento non sono efficaci in questi scenari a causa della natura di blocco / schema / transazione degli RDBM. Questo è il motivo per cui hanno implementato i propri database (in realtà, archivi di valori-chiave) per un enorme aumento delle prestazioni e scalabilità.

I database NoSQL sono in circolazione da molto tempo - solo il termine è nuovo. Alcuni esempi sono database di grafici, oggetti, colonne, XML e documenti.

Per la tua seconda domanda: va bene usare entrambi sullo stesso sito?

Perchè no? Entrambi hanno scopi diversi, giusto?


1
Non credo che l'ACID sia esclusivo dei database relazionali. Puoi avere garanzie di durabilità, transazioni, visualizzare la coerenza in database non relazionali.
Thilo,

@RamshVel potresti fornire un esempio di un database di tipi di archivio valore-chiave? Grazie.
Rachael,

1
@Rachael, alcuni esempi sono redis, leveldb e riak .. ce ne sono tonnellate in giro, puoi
cercarlo su

76

Le soluzioni NoSQL sono generalmente pensate per risolvere un problema per il quale i database relazionali non sono adatti, troppo costosi da usare (come Oracle) o richiedono di implementare qualcosa che rompe comunque la natura relazionale del vostro db.

I vantaggi sono in genere specifici per il tuo utilizzo, ma a meno che tu non abbia qualche tipo di problema nel modellare i tuoi dati in un RDBMS non vedo alcun motivo per scegliere NoSQL.

Io stesso utilizzo MongoDB e Riak per problemi specifici in cui un RDBMS non è una soluzione praticabile, per tutte le altre cose che uso MySQL (o SQLite per i test).

Se hai bisogno di un db NoSQL che di solito conosci, i possibili motivi sono:

  • il cliente desidera una disponibilità del 99,999% su un sito ad alto traffico.
  • i tuoi dati non hanno senso in SQL, ti ritrovi a fare più query JOIN per accedere ad alcune informazioni.
  • stai infrangendo il modello relazionale, hai CLOB che memorizzano dati denormalizzati e generi indici esterni per cercare quei dati.

Se non hai bisogno di una soluzione NoSQL, tieni presente che queste soluzioni non erano intese come sostituti di un RDBMS ma piuttosto come alternative in cui la prima ha esito negativo e, cosa più importante, che sono relativamente nuove in quanto tali, hanno ancora molti bug e funzioni mancanti.

Oh, e per quanto riguarda la seconda domanda, va benissimo usare qualsiasi tecnologia in combinazione con un'altra, quindi solo per essere completo dalla mia esperienza MongoDB e MySQL lavorano bene insieme purché non siano sulla stessa macchina


3
Grazie per la risposta. I tuoi esempi di quando usare NoSQL sono alquanto vaghi. Speravo in un caso d'uso più specifico in modo da poter decidere se i miei dati fossero archiviati meglio in un database NoSQL.
smfoote,

Cerco di non rispondere alla stessa domanda due volte, guardo la mia precedente risposta a una domanda molto simile stackoverflow.com/questions/3621415/…
Asaf

Sono d'accordo con la grande risposta di Asaf, in realtà ci sono solo alcuni scenari in cui dovresti aver bisogno di un NoSQL su un RDBMS. Vedo NoSQL più come un db di backup o "db aggiuntivo" che come un db principale. Non ho ancora visto un buon sistema, in cui il core db era un NoSQL.
Jo Smo,

38

Martin Fowler ha un video eccellente che fornisce una buona spiegazione dei database NoSQL. Il link va direttamente ai suoi motivi per usarli, ma l'intero video contiene buone informazioni.

  1. Hai una grande quantità di dati, soprattutto se non puoi adattarli tutti su un server fisico poiché NoSQL è stato progettato per adattarsi bene.

  2. Mancata corrispondenza dell'impedenza relazionale oggetto: gli oggetti del dominio non si adattano bene in uno schema di database relaizionale. NoSQL ti consente di mantenere i tuoi dati come documenti (o grafici) che possono essere mappati molto più da vicino al tuo modello di dati.


16

NoSQL è un sistema di database in cui i dati sono organizzati nel documento (MongoDB), coppia chiave-valore (MemCache, Redis), forma di struttura grafica (Neo4J).

Forse qui ci sono possibili domande e risposte per "Quando scegliere NoSQL":

  1. Hai bisogno di uno schema flessibile o gestisci dati come gli alberi?
    Generalmente, nello sviluppo agile, iniziamo a progettare il sistema senza conoscere tutti i requisiti in anticipo, dove in seguito in tutto il sistema di database di sviluppo potrebbe essere necessario adeguarsi a frequenti cambiamenti di progettazione, mostrando MVP (prodotto minimo vitale). Oppure hai a che fare con uno schema di dati di natura dinamica. es. Log di sistema, esempio molto preciso sono i log di AWS cloudwatch.

  2. Il set di dati è vasto / grande?
    Sì No I database SQL sono i candidati migliori per le applicazioni in cui il database deve gestire milioni o addirittura miliardi di record senza compromettere le prestazioni.

  3. Scambia tra ridimensionamento e coerenza
    A differenza di RDMS, il database NoSQL può perdere piccoli dati qua e là (Nota: la probabilità è .x%), ma è facile ridimensionare in termini di prestazioni. Esempio: questo può essere utile per archiviare persone che sono online nell'app di messaggistica istantanea, token in db, registrazione delle statistiche sul traffico del sito Web.

  4. Esecuzione di operazioni di geolocalizzazione: MongoDB ha un ricco supporto di hash per eseguire operazioni di geoquery e geolocalizzazione. Ho adorato questa funzionalità di MongoDB.

In breve, MongoDB è perfetto per le applicazioni in cui è possibile archiviare dati strutturati dinamici su larga scala.


4
"Il database NoSQL può perdere piccoli dati qua e là" WTF !? Ora chi nella loro mente giusta vorrebbe rischiare? Questo deve essere falso.
Jay Q.

1
@JayQ. Sì, potrebbe essere falso. Ecco perché ho detto * forse. Allora perché non possiamo usare i DB NpSQL per le operazioni transazionali?
Hrishikesh, il

7

Mancano alcune informazioni essenziali per rispondere alla domanda: quali casi d'uso deve essere in grado di coprire il database? Le analisi complesse devono essere eseguite da dati esistenti ( OLAP ) o l'applicazione deve essere in grado di elaborare molte transazioni ( OLTP )? Qual è la struttura dei dati? Questo è lontano dalla fine del tempo delle domande.

A mio avviso, è sbagliato prendere decisioni tecnologiche sulla base di parole in grassetto senza sapere esattamente cosa c'è dietro. NoSQL è spesso elogiato per la sua scalabilità. Ma devi anche sapere che il ridimensionamento orizzontale (su diversi nodi) ha anche il suo prezzo e non è gratuito. Quindi devi affrontare problemi come l' eventuale coerenza e definire come risolvere i conflitti di dati se non possono essere risolti a livello di database. Tuttavia, questo vale per tutti i sistemi di database distribuiti.

La gioia degli sviluppatori con la parola "schema less" su NoSQL è anche all'inizio molto grande. Questa parola d'ordine viene rapidamente disincantata dopo l'analisi tecnica, poiché non richiede correttamente uno schema durante la scrittura, ma entra in gioco durante la lettura. Ecco perché dovrebbe essere correttamente "schema in lettura". Potrebbe essere allettante essere in grado di scrivere i dati a propria discrezione. Ma come posso gestire la situazione se esistono dati esistenti ma la nuova versione dell'applicazione prevede uno schema diverso?

Il modello di documento (come ad esempio MongoDB) non è adatto a modelli di dati in cui vi sono molte relazioni tra i dati. I join devono essere eseguiti a livello di applicazione, il che è uno sforzo aggiuntivo e perché dovrei programmare cose che il database dovrebbe fare.

Se si sostiene che Google e Amazon hanno sviluppato i propri database perché RDBMS convenzionale non è più in grado di gestire il flusso di dati, si può solo dire: non si è Google e Amazon. Queste aziende sono la punta di diamante, circa lo 0,01% degli scenari in cui i database tradizionali non sono più adatti, ma per il resto del mondo lo sono.

Ciò che non è insignificante: SQL esiste da oltre 40 anni e milioni di ore di sviluppo sono passate a grandi sistemi come Oracle o Microsoft SQL. Questo deve essere raggiunto da alcuni nuovi database. A volte è anche più facile trovare un amministratore SQL che qualcuno per MongoDB. Il che ci porta alla questione della manutenzione e della gestione. Un argomento che non è esattamente sexy, ma fa parte della decisione tecnologica.


1
sembra corretto ma non credo sia anche giusto confrontare quanto tempo ha trascorso se fosse così che tutti
userebbero il

3

Mi sono imbattuto in questa domanda mentre cercavo motivi convincenti per deviare dal design RDBMS.

C'è un ottimo post di Julian Brown che fa luce sui vincoli dei sistemi distribuiti. Il concetto si chiama Teorema della PAC di Brewer che in sintesi va:

I tre requisiti dei sistemi distribuiti sono: coerenza, disponibilità e tolleranza alle partizioni (in breve PAC). Ma puoi averne solo due alla volta.

Ed è così che l'ho sintetizzato per me stesso:

È meglio scegliere NoSQL se la coerenza è ciò che stai sacrificando.


0

Ho progettato e implementato soluzioni con database NoSQL ed ecco il mio elenco di punti di controllo per prendere la decisione di utilizzare SQL o NoSQL orientato ai documenti .

NON FARE

SQL non è obsoleto e rimane uno strumento migliore in alcuni casi. È difficile giustificare l'uso di un NoSQL orientato ai documenti quando

  • Hai bisogno di OLAP / OLTP
  • È un piccolo progetto / semplice struttura DB
  • Hai bisogno di domande ad hoc
  • Non è possibile evitare consistenza immediata
  • Requisiti poco chiari
  • Mancanza di sviluppatori esperti

DO

Se non hai queste condizioni o puoi mitigarle, ecco 2 motivi per cui potresti beneficiare di NoSQL:

  • È necessario eseguire su larga scala
  • Convenienza di sviluppo (migliore integrazione con il tuo stack tecnologico, nessuna necessità in ORM, ecc.)

Ulteriori informazioni

Nei miei post sul blog spiego i motivi in ​​modo più dettagliato:

Nota: quanto sopra è applicabile solo a NoSQL orientato ai documenti. Esistono altri tipi di NoSQL, che richiedono altre considerazioni.


0

Gestire un gran numero di operazioni di scrittura in lettura

Guardare verso i database NoSQL quando è necessario ridimensionare rapidamente. E quando generalmente devi ridimensionare velocemente?

Quando sul tuo sito Web è presente un numero elevato di operazioni di lettura / scrittura e quando si ha a che fare con una grande quantità di dati, i database NoSQL si adattano meglio a questi scenari. Poiché hanno la possibilità di aggiungere nodi al volo, possono gestire più traffico simultaneo e una grande quantità di dati con una latenza minima.

Flessibilità con la modellazione dei dati

Il secondo spunto è durante le fasi iniziali dello sviluppo quando non si è sicuri del modello di dati, della progettazione del database, le cose dovrebbero cambiare rapidamente. I database NoSQL ci offrono maggiore flessibilità.

Coerenza finale su forte coerenza

È preferibile scegliere i database NoSQL quando è OK rinunciare a una coerenza forte e quando non sono necessarie transazioni.

Un buon esempio di questo è un sito di social network come Twitter. Quando un tweet di una celebrità esplode e tutti lo apprezzano e lo twittano da tutto il mondo. Importa se il conteggio dei Mi piace aumenta o diminuisce un po 'per un breve periodo?

Alla celebrità sicuramente non importerebbe se invece degli attuali 5 milioni 500 mi piace, il sistema mostra che i simili contano come 5 milioni 250 per un breve periodo.

Quando una grande applicazione viene distribuita su centinaia di server sparsi in tutto il mondo, i nodi distribuiti geograficamente impiegano del tempo per raggiungere un consenso globale.

Fino a quando non raggiungono un consenso, il valore dell'entità è incoerente. Il valore dell'entità alla fine diventa coerente dopo poco tempo. Questo è ciò che è l'eventuale coerenza.

Sebbene l'incoerenza non significhi che c'è qualche tipo di perdita di dati. Significa solo che i dati impiegano poco tempo per viaggiare attraverso il mondo tramite i cavi Internet sotto l'oceano per raggiungere un consenso globale e diventare coerenti.

Sperimentiamo sempre questo comportamento. Soprattutto su YouTube. Spesso vedresti un video con 10 visualizzazioni e 15 Mi piace. Come è possibile?

Non è. Le visualizzazioni effettive sono già più che simili. È solo il conteggio delle visualizzazioni è incoerente e richiede un po 'di tempo per essere aggiornato.

Esecuzione di Data Analytics

I database NoSQL si adattano perfettamente anche ai casi d'uso di analisi dei dati, in cui dobbiamo gestire un afflusso di enormi quantità di dati.

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.