¿Diferencia entre bases de datos basadas en documentos y bases de datos clave / valor?

97

Sé que hay tres tipos diferentes y populares de bases de datos que no son SQL.

  • Clave / valor: Redis, Tokyo Cabinet, Memcached
  • Familia de columnas: Cassandra, HBase
  • Documento: MongoDB, CouchDB

He leído blogs extensos al respecto sin entender mucho.

Conozco las bases de datos relacionales y me acostumbro a las bases de datos basadas en documentos como MongoDB / CouchDB.

¿Alguien podría decirme cuáles son las principales diferencias entre estos y los 2 primeros de la lista?

never_had_a_name
fuente
4
Hay cinco: (1) Almacenes de valores clave: Oracle Coherence, Redis, Kyoto Cabinet (2) Bases de datos estilo BigTable: Apache HBase, Apache Cassandra (3) Bases de datos de documentos: MongoDB, CouchDB (4) Motores de búsqueda de texto completo: Apache Lucene, Apache Solr (5) Bases de datos de gráficos: neo4j, FlockDB, consulte nosql-data-modelado-técnicas
Gary Gauh

Respuestas:

74

Las principales diferencias son el modelo de datos y las capacidades de consulta.

Tiendas de valores clave

El primer tipo es muy simple y probablemente no necesite más explicaciones.

Modelo de datos: más que almacenes de valores-clave

Aunque existe cierto debate sobre el nombre correcto de las bases de datos como Cassandra, me gustaría llamarlas tiendas de familia de columnas . Aunque los pares clave-valor son una parte esencial de Cassandra, no se limitan solo a eso. Le permite anidar pares clave-valor, por lo que una clave podría hacer referencia a múltiples pares de sub-clave-valor.

Sin embargo, no puede anidar pares clave-valor de forma indefinida. Está limitado a tres niveles (familias de columnas) o cuatro niveles de anidación (familias de supercolumnas). En caso de que el término familia de columnas no le suene, vea que WTF es un artículo de SuperColumn , es una buena explicación del modelo de datos de Cassandra.

Las bases de datos de documentos , como CouchDB y MongoDB, almacenan documentos completos en forma de objetos JSON . Puede pensar en estos objetos como pares clave-valor anidados. A diferencia de Cassandra, puede anidar pares clave-valor tanto como desee. JSON también admite matrices y comprende diferentes tipos de datos, como cadenas, números y valores booleanos.

Consultando

Creo que las tiendas de familias de columnas solo se pueden consultar por clave o escribiendo funciones de reducción de mapas. No puede consultar los valores como lo haría en una base de datos SQL. Si su aplicación necesita consultas más complejas, su aplicación deberá crear y mantener índices para acceder a los datos deseados.

Las bases de datos de documentos también admiten consultas por funciones clave y reducción de mapas, pero también le permiten realizar consultas básicas por valor, como "Darme todos los usuarios con más de 10 publicaciones". Las bases de datos de documentos son más flexibles de esta manera.

Niels van der Rest
fuente
2
Entonces, las tiendas de valores clave como redit no le permiten almacenar claves anidadas: ¿valores? Y a partir de su descripción, almacenar una base de datos completa (desde RDBMS) en Cassandra no suena muy inteligente porque no permite consultas flexibles y tiene una profundidad de anidación limitada, ¿verdad?
never_had_a_name
7
@ajsie: correcto, los almacenes clave-valor no admiten pares clave-valor anidados. Sin embargo, la mayoría de ellos admiten valores especializados, como listas. Cassandra es muy diferente de un RDBMS, ya que ambos están diseñados para resolver problemas muy diferentes. Los sistemas RDBMS están destinados a datos relacionales que necesitan consultas complejas, mientras que Cassandra está destinado a procesar enormes cantidades de datos en su mayoría no relacionales. Por supuesto, es posible mover una base de datos RDBMS a Cassandra, pero no es muy inteligente. Cada uno de ellos tiene su propio uso.
Niels van der Rest
Entonces, ¿es cada base de datos de documentos también una clave, un almacén de valor donde el valor es simplemente un JSON como {value: base64 (val)}?
GroovyDotCom
@GroovyDotCom: Sí, podría usar una base de datos de documentos para almacenar objetos simples de clave / valor.
Niels van der Rest
15

Ayende ha dado una buena explicación sobre la diferencia entre el valor clave y la base de datos de documentos:

Una base de datos de documentos es, en esencia, un almacén de clave / valor con una excepción importante. En lugar de simplemente almacenar cualquier blob en él, una base de datos de documento requiere que los datos se almacenen en un formato que la base de datos pueda entender (es decir, JSON, XML, etc.). En la mayoría de las bases de datos de documentos, eso significa que ahora podemos permitir consultas sobre los datos del documento.

Ashraf Alam
fuente