Perché dovrei usare un database basato su documenti anziché un database relazionale?


188

Perché dovrei usare un database basato su documenti come CouchDB invece di usare un database relazionale. Esistono tipi tipici di applicazioni o domini in cui il database basato su documenti è più adatto del database relazionale?


Forse un database orientato ai documenti potrebbe essere in qualche modo simile a un database "entità-attributo-valore" (EAV).
ChrisW,

Risposte:


167

Probabilmente non dovresti :-)

La seconda risposta più ovvia è che dovresti usarlo se i tuoi dati non sono relazionali. Questo di solito si manifesta nel non avere un modo semplice per descrivere i tuoi dati come un insieme di colonne. Un buon esempio è un database in cui vengono effettivamente archiviati documenti cartacei, ad esempio tramite la scansione della posta dell'ufficio. I dati sono il PDF scansionato e hai alcuni metadati che esistono sempre (scansionati, scansionati da, tipo di documento) e molti possibili campi di metadati che esistono in qualche momento (numero cliente, numero fornitore, numero ordine, tieni un file fino a, Testo completo OCR, ecc.). Di solito non sai in anticipo quali campi di metadati aggiungerai nei prossimi due anni. Cose come CouchDB funzionano molto meglio per quel tipo di dati rispetto ai database relazionali.

Personalmente amo anche il fatto che non ho bisogno di librerie client per CouchDB tranne un client HTTP, che al giorno d'oggi è incluso in quasi tutti i linguaggi di programmazione.

La risposta probabilmente meno ovvia: se non senti alcun dolore usando un RDBMS, rimani con esso. Se devi sempre aggirare il tuo RDBMS per fare il tuo lavoro, un database orientato ai documenti potrebbe valere la pena dare un'occhiata.

Per un elenco più elaborato controlla questo post di Richard Jones .


1
Non ho mai visto uno schema di database in due anni simile allo schema originale con cui abbiamo iniziato ... quindi, tutto uguale (che non è ...), dovresti sempre usare un database schematico = orientato al documento; che penso sia un nome piuttosto fuorviante ...
ᆼ ᆺ ᆼ

3
@ int3 Se non riesci a descrivere i tuoi dati come un insieme di colonne, come dovresti scrivere query intelligenti su tali dati?
Clay Smith,

46

CouchDB (dal loro sito Web )

  • Un server di database di documenti, accessibile tramite un'API JSON RESTful. Generalmente, i database relazionali non sono semplicemente accessibili tramite i servizi REST, ma richiedono un'API SQL molto più complessa. Spesso queste API (JDBC, ODBC, ecc.) Sono piuttosto complesse. REST è abbastanza semplice.

  • Ad-hoc e privo di schemi con uno spazio indirizzo piatto. I database relazionali hanno schemi complessi e fissi. Definisci tabelle, colonne, indici, sequenze, viste e altre cose. Couch non richiede questo livello di pianificazione avanzata complessa, costosa e fragile.

  • Distribuito, caratterizzato da una replica robusta e incrementale con rilevamento e gestione dei conflitti bidirezionali. Alcuni prodotti commerciali SQL offrono questo. A causa dell'API SQL e degli schemi fissi, questo è complesso, difficile e costoso. Per Couch, sembra semplice ed economico.

  • Interrogazione e indicizzazione, con un motore di report orientato alle tabelle che utilizza Javascript come linguaggio di interrogazione. Lo stesso vale per i database SQL e relazionali. Niente di nuovo qui.

Così. Perché CouchDB?

  • REST è più semplice di JDBC o ODBC.
  • Nessuno schema è più semplice dello schema.
  • Distribuito in un modo che sembra semplice ed economico.

12
Mentre sono un grande fan dei database NoSQL, la prima affermazione (REST è più semplice di JDBC) è molto dubbia.
ᆼ ᆺ ᆼ

2
Il protocollo REST mi sembra piuttosto semplice, dato che è solo HTTP: stateless, pochi metodi, ecc. Forse JDBC è (sotto il cofano) semplice; non sembra essere più semplice, basato semplicemente sull'essere stateful.
S.Lott

5
@ S.Lott La risposta non dovrebbe essere più "generica" ​​invece che orientata esclusivamente verso CouchDb?
Pacerier,

"fragile pianificazione avanzata" vs cosa? Nella mia esperienza, l'alternativa è la non pianificazione che porta a strutture di dati spaghetti che vengono modificate per capriccio.
Tejay Cardon,

26

Per archiviare e servire stupidamente dati di altri server.

Nelle ultime due settimane ho giocato con un'app lifestream che esegue il polling dei miei feed (delizioso, flickr, github, twitter ...) e li memorizza in couchdb. Il bello di couchdb è che mi permette di mantenere i dati originali nella sua struttura originale senza spese generali. Ho aggiunto un campo 'class' a ciascun documento, memorizzando il server di origine e ho scritto una classe di rendering javascript per ogni sorgente.

Generalizzando, ogni volta che il tuo server comunica con un altro server è meglio una memoria senza schema poiché non hai alcun controllo sullo schema. Come bonus, couchdb utilizza i protocolli nativi di server e client: JSON per la rappresentazione e HTTP REST per il trasporto.


Perché non archiviarli in un file o in un file per feed?
j_random_hacker,

6
perché couchdb ti consente anche di creare viste interessanti usando la mappa / riduzione. Ad esempio, posso creare una vista in base all'origine dati oppure posso calcolare i totali per ciascuna fonte.
daonb,

4
Questo è un punto brillante ... se stai consumando dati e non hai alcun controllo sullo schema dei dati in entrata, usa un archivio documenti.
Joshua Robinson,

1
Questo è il primo argomento davvero convincente che ho sentito per il valore dei database NoSQL
Caleb McNevin

20

Mi viene in mente lo sviluppo rapido di applicazioni.

Quando evolvo costantemente il mio schema, sono costantemente frustrato dal dover mantenere lo schema in MySQL / SQLite. Anche se non ho ancora fatto troppo con CouchDB, mi piace quanto sia semplice evolvere lo schema durante il processo RAD.

Un caso in cui potresti non voler utilizzare un database non relazionale è quando hai molte relazioni molti-a-molti; Devo ancora capire come creare buone funzioni MapReduce attorno a questo tipo di relazioni, in particolare se è necessario disporre di metadati nella relazione di unione. Non ne sono sicuro, ma non credo che le funzioni di CouchDB Map possano chiamare le loro stesse query sul database, poiché ciò potrebbe potenzialmente causare cicli infiniti.


1
Punto eccellente. I datastore di documenti (e altri schemi) sono ottimi per un rapido sviluppo iniziale. Tuttavia, per gli stessi motivi che sono ottimi per la prototipazione in fase iniziale, sono problematici per applicazioni di produzione robuste.
Tejay Cardon,

6

Utilizzare un database basato su documenti quando non è necessario archiviare dati in tabelle con campi di dimensioni uniformi per ciascun record. Invece, è necessario archiviare ciascun record come documento con determinate caratteristiche. Qualsiasi numero di campi di qualsiasi lunghezza può essere aggiunto dinamicamente a un documento in qualsiasi momento senza la necessità di "modificare la tabella" per prima. I campi basati su documenti possono contenere anche più parti di dati.


1

Elaborare su smdelfin: flessibilità. È possibile archiviare i dati in qualsiasi struttura (non strutturati e tutti) e ogni documento potrebbe essere completamente diverso. CouchDB è particolarmente utile perché con i loro indici di "visualizzazione", è possibile filtrare documenti specifici e interrogare solo quella vista quando si desidera quei sottoinsiemi del database.

Il mio più grande punto vincente di database di documenti che memorizzano i dati in formato JSON: questo è il formato nativo per JavaScript. Pertanto, le applicazioni Web JavaScript funzionano perfettamente con CouchDB. Di recente ho realizzato un'app Web che utilizza CouchDB ed è veloce come il razzo, ma anche in grado di gestire una struttura di dati in costante variazione.


0

I database basati su documenti hanno un grande vantaggio rispetto ai database relazionali in quanto non richiedono la definizione anticipata di uno schema prima di poter immettere dati.

Inoltre, è necessario utilizzare un database di documenti se i dati non sono relazionali e non possono essere archiviati in una tabella ma sono piuttosto un insieme di immagini o, ad esempio, articoli di giornale.

Un altro vantaggio è la facilità d'uso di database basati su documenti nello sviluppo web. Per un confronto più approfondito dei modelli di database NoSQL, controllare questa fonte: https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf

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.