Diferença entre bancos de dados baseados em documentos e baseados em chave / valor?


97

Eu sei que existem três tipos diferentes e populares de bancos de dados não sql.

  • Chave / valor: Redis, Tokyo Cabinet, Memcached
  • ColumnFamily: Cassandra, HBase
  • Documento: MongoDB, CouchDB

Eu li longos blogs sobre isso sem entender muito.

Eu conheço bancos de dados relacionais e fico por dentro de bancos de dados baseados em documentos como MongoDB / CouchDB.

Alguém poderia me dizer quais são as principais diferenças entre esses e os 2 primeiros da lista?


4
há cinco: (1) Armazenamentos de valores-chave: Oracle Coherence, Redis, Kyoto Cabinet (2) Bancos de dados estilo BigTable: Apache HBase, Apache Cassandra (3) Bancos de dados de documentos: MongoDB, CouchDB (4) Mecanismos de pesquisa de texto completo: Apache Lucene, Apache Solr (5) Bancos de dados gráficos: neo4j, FlockDB, consulte nosql-data-modelagem-técnicas
Gary Gauh

Respostas:


74

As principais diferenças são o modelo de dados e os recursos de consulta.

Armazenamentos de valores-chave

O primeiro tipo é muito simples e provavelmente não precisa de nenhuma explicação adicional.

Modelo de dados: mais do que armazenamentos de valores-chave

Embora haja algum debate sobre o nome correto para bancos de dados como Cassandra, gostaria de chamá-los de lojas de família de colunas . Embora os pares de valores-chave sejam uma parte essencial do Cassandra, não se limita apenas a isso. Ele permite que você aninhe pares de valores-chave, de forma que uma chave possa se referir a vários pares de valores-chave.

No entanto, você não pode aninhar pares de valores-chave indefinidamente. Você está limitado a três níveis (famílias de colunas) ou quatro níveis de aninhamento (famílias de supercolunas). No caso do termo família de colunas não soar como um sino, consulte o WTF é um artigo do SuperColumn , é uma boa explicação do modelo de dados do Cassandra.

Bancos de dados de documentos , como CouchDB e MongoDB, armazenam documentos inteiros na forma de objetos JSON . Você pode pensar nesses objetos como pares de valores-chave aninhados. Ao contrário do Cassandra, você pode aninhar pares de valor-chave o quanto quiser. JSON também oferece suporte a matrizes e entende diferentes tipos de dados, como strings, números e valores booleanos.

Consultando

Acredito que as lojas de famílias de colunas só podem ser consultadas por chave ou escrevendo funções de redução de mapa. Você não pode consultar os valores como faria em um banco de dados SQL. Se seu aplicativo precisa de consultas mais complexas, ele terá que criar e manter índices para acessar os dados desejados.

Os bancos de dados de documentos também oferecem suporte a consultas por chave e funções de redução de mapa, mas também permitem que você faça consultas básicas por valor, como "Dê-me todos os usuários com mais de 10 postagens". Bancos de dados de documentos são mais flexíveis dessa maneira.


2
Portanto, os armazenamentos de key-value como redit não permitem que você armazene key: values? E pela sua descrição, armazenar um banco de dados inteiro (do RDBMS) no Cassandra não parece muito inteligente, porque não permite consulta flexível e tem profundidade de aninhamento limitada, certo?
never_had_a_name

7
@ajsie: correto, armazenamentos de valores-chave não suportam pares de valores-chave aninhados. A maioria deles oferece suporte a valores especializados, como listas. O Cassandra é muito diferente de um RDBMS, pois ambos são projetados para resolver problemas muito diferentes. Os sistemas RDBMS são voltados para dados relacionais que precisam de consultas complexas, enquanto o Cassandra é voltado para o processamento de enormes quantidades de dados, em sua maioria, não relacionais. Claro que é possível mover um banco de dados RDBMS para o Cassandra, mas não é muito inteligente. Cada um deles tem seu próprio uso.
Niels van der Rest

Portanto, todo banco de dados de documentos também é um armazenamento de chave e valor, onde o valor é simplesmente um JSON como {value: base64 (val)}?
GroovyDotCom

@GroovyDotCom: Sim, você pode usar um banco de dados de documentos para armazenar objetos de chave / valor simples.
Niels van der Rest

15

Ayende deu uma boa explicação sobre a diferença entre o banco de dados de Key-Value e Document:

Um banco de dados de documentos é, em seu núcleo, um armazenamento de chave / valor com uma exceção principal. Em vez de apenas armazenar qualquer blob nele, um banco de dados de documento requer que os dados sejam armazenados em um formato que o banco de dados possa entender (ou seja, JSON, XML etc). Na maioria dos doc dbs, isso significa que agora podemos permitir consultas nos dados do documento.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.