Differenza tra database basati su documenti e basati su chiave / valore?


97

So che esistono tre tipi diversi e popolari di database non SQL.

  • Chiave / Valore: Redis, Tokyo Cabinet, Memcached
  • ColumnFamily: Cassandra, HBase
  • Documento: MongoDB, CouchDB

Ho letto lunghi blog a riguardo senza capirne così tanto.

Conosco database relazionali e conosco database basati su documenti come MongoDB / CouchDB.

Qualcuno potrebbe dirmi quali sono le principali differenze tra questi e i 2 precedenti nell'elenco?


4
ce ne sono cinque: (1) archivi di valori chiave: Oracle Coherence, Redis, Kyoto Cabinet (2) Database in stile BigTable: Apache HBase, Apache Cassandra (3) Database di documenti: MongoDB, CouchDB (4) Motori di ricerca full-text: Apache Lucene, Apache Solr (5) Graph Databases: neo4j, FlockDB, vedere nosql-data-modeling-technique
Gary Gauh

Risposte:


74

Le principali differenze sono il modello di dati e le capacità di interrogazione.

Archivi di valori-chiave

Il primo tipo è molto semplice e probabilmente non necessita di ulteriori spiegazioni.

Modello di dati: più che archivi di valori-chiave

Sebbene ci sia qualche dibattito sul nome corretto per database come Cassandra, mi piacerebbe chiamarli archivi di famiglie di colonne . Sebbene le coppie chiave-valore siano una parte essenziale di Cassandra, non si limita a questo. Ti consente di nidificare coppie chiave-valore, in modo che una chiave possa fare riferimento a più coppie sotto-chiave-valore.

Tuttavia, non puoi nidificare coppie chiave-valore a tempo indeterminato. Sei limitato a tre livelli (famiglie di colonne) o quattro livelli di nidificazione (famiglie di supercolonne). Nel caso in cui il termine famiglia di colonne non suoni un campanello, vedere il WTF è un articolo di SuperColumn , è una buona spiegazione del modello di dati di Cassandra.

I database di documenti , come CouchDB e MongoDB, archiviano interi documenti sotto forma di oggetti JSON . Puoi pensare a questi oggetti come coppie chiave-valore nidificate. A differenza di Cassandra, puoi nidificare le coppie chiave-valore quanto vuoi. JSON supporta anche array e comprende diversi tipi di dati, come stringhe, numeri e valori booleani.

Interrogare

Credo che gli archivi della famiglia di colonne possano essere interrogati solo per chiave o scrivendo funzioni di riduzione della mappa. Non è possibile interrogare i valori come si farebbe in un database SQL. Se la tua applicazione necessita di query più complesse, la tua applicazione dovrà creare e mantenere gli indici per poter accedere ai dati desiderati.

I database dei documenti supportano anche le query per chiave e le funzioni di riduzione della mappa, ma consentono anche di eseguire query di base in base al valore, come "Dammi tutti gli utenti con più di 10 post". I database dei documenti sono più flessibili in questo modo.


2
Quindi gli archivi chiave-valore come redit non ti consentono di memorizzare chiave: valori nidificati? E dalla tua descrizione, la memorizzazione di un intero database (da RDBMS) in Cassandra non sembra molto intelligente perché non consente query flessibili e ha una profondità di annidamento limitata, giusto?
never_had_a_name

7
@ajsie: corretto, gli archivi chiave-valore non supportano le coppie chiave-valore nidificate. La maggior parte di essi supporta tuttavia valori specializzati, come gli elenchi. Cassandra è molto diversa da un RDBMS, poiché entrambi sono progettati per risolvere problemi molto diversi. I sistemi RDBMS sono finalizzati a dati relazionali che richiedono query complesse, mentre Cassandra è finalizzato all'elaborazione di enormi quantità di dati per lo più non relazionali. Ovviamente è possibile spostare un database RDBMS su Cassandra, ma non è davvero molto intelligente. Ognuno di loro ha il proprio uso.
Niels van der Rest

Quindi ogni database di documenti è anche una chiave, un archivio di valori in cui il valore è semplicemente un JSON come {value: base64 (val)}?
GroovyDotCom

@ GroovyDotCom: Sì, è possibile utilizzare un database di documenti per memorizzare semplici oggetti chiave / valore.
Niels van der Rest

15

Ayende ha fornito una bella spiegazione riguardo alla differenza tra valore-chiave e database di documenti:

Un database di documenti è, fondamentalmente, un archivio chiave / valore con una delle principali eccezioni. Invece di archiviare semplicemente qualsiasi blob al suo interno, un database di documenti richiede che i dati vengano archiviati in un formato che il database può comprendere (ad esempio JSON, XML, ecc.). Nella maggior parte dei db di documenti, ciò significa che ora possiamo consentire le query sui dati del documento.

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.