Los tres tipos de bases de datos NoSQL sobre los que he leído es clave-valor, orientada a columnas y orientada a documentos.
El valor clave es bastante sencillo: una clave con un valor simple.
He visto bases de datos orientadas a documentos descritas como clave-valor, pero el valor puede ser una estructura, como un objeto JSON. Cada "documento" puede tener todas, algunas o ninguna de las mismas claves que otro.
La orientación a columnas parece ser muy similar a la orientación a documentos en el sentido de que no especifica una estructura.
Entonces, ¿cuál es la diferencia entre estos dos y por qué usarías uno sobre el otro?
He analizado específicamente MongoDB y Cassandra. Básicamente necesito una estructura dinámica que pueda cambiar, pero que no afecte a otros valores. Al mismo tiempo, necesito poder buscar / filtrar claves específicas y ejecutar informes. Con CAP, AP es lo más importante para mí. Los datos pueden "eventualmente" sincronizarse entre nodos, siempre y cuando no haya conflicto o pérdida de datos. Cada usuario obtendría su propia "tabla".
La principal diferencia es que los almacenes de documentos (por ejemplo, MongoDB y CouchDB) permiten documentos arbitrariamente complejos, es decir, subdocumentos dentro de subdocumentos, listas con documentos, etc., mientras que los almacenes de columnas (por ejemplo, Cassandra y HBase) solo permiten un formato fijo, por ejemplo, estricto de un nivel o diccionarios de dos niveles.
fuente
En "insertar", para usar palabras rdbms, Document-based es más consistente y directo. Tenga en cuenta que cassandra le permite lograr coherencia con la noción de quórum, pero eso no se aplicará a todos los sistemas basados en columnas y eso reduce la disponibilidad. En un sistema pesado de escritura única / lectura a menudo, elija MongoDB. También considérelo si siempre planea leer la estructura completa del objeto. Un sistema basado en documentos está diseñado para devolver el documento completo cuando lo recibe, y no es muy sólido para devolver partes de toda la fila.
Los sistemas basados en columnas como Cassandra son mucho mejores que los basados en documentos en "actualizaciones". Puede cambiar el valor de una columna sin siquiera leer la fila que la contiene. En realidad, la escritura no debe realizarse en el mismo servidor, una fila puede estar contenida en varios archivos de varios servidores. En un enorme sistema de datos de rápida evolución, elija Cassandra. También considérelo si planea tener una gran cantidad de datos por clave y no necesitará cargarlos todos en cada consulta. En "seleccionar", Cassandra le permite cargar solo la columna que necesita.
También considere que Mongo DB está escrito en C ++ y se encuentra en su segunda versión principal, mientras que Cassandra necesita ejecutarse en una JVM, y su primera versión principal está en versión candidata desde ayer (pero las versiones 0.X se convirtieron en producciones de empresa importante ya).
Por otro lado, el diseño de Cassandra se basó en parte en Amazon Dynamo, y está construido en su núcleo para ser una solución de alta disponibilidad, pero eso no tiene nada que ver con el formato basado en columnas. MongoDB también se escala, pero no con tanta gracia como Cassandra.
fuente
Diría que la principal diferencia es la forma en que cada uno de estos tipos de bases de datos almacena físicamente los datos.
Con los tipos de columna, los datos se almacenan en columnas que pueden permitir operaciones de agregación / consultas eficientes en una columna en particular.
Con los tipos de documentos, el documento completo se almacena lógicamente en un lugar y generalmente se recupera como un todo (no es posible una agregación eficiente en "columnas" / "campos").
El bit confuso es que una "fila" de columna ancha se puede representar fácilmente como un documento, pero, como se mencionó, se almacenan de manera diferente y se optimizan para diferentes propósitos.
fuente