relacional funciona ejemplos desventajas datos como columnar caracteristicas bases aws database rdbms nosql column-oriented

database - funciona - ¿Cuál es la diferencia entre NoSQL y una base de datos orientada a columnas?



caracteristicas base de datos columnar (7)

Algunas bases de datos NoSQL son bases de datos orientadas a columnas, y algunas bases de datos SQL también están orientadas a columnas. Si la base de datos está orientada a columnas o filas es un detalle de implementación de almacenamiento físico de la base de datos y puede ser cierto tanto para bases de datos relacionales como no relacionales (NoSQL).

Vertica, por ejemplo, es una base de datos relacional orientada a columnas, por lo que en realidad no calificaría como un almacén de datos NoSQL.

Un almacén de datos de "movimiento NoSQL" se define mejor como una base de datos no relacional, de nada compartido, horizontalmente escalable sin (necesariamente) garantías ACID. Algunas bases de datos orientadas a columnas se pueden caracterizar de esta manera. Además de los almacenes de columnas, las implementaciones de NoSQL también incluyen almacenes de documentos, almacenes de objetos, almacenes de tuplas y almacenes de gráficos.

Cuanto más leo sobre NoSQL, más me suena como una base de datos orientada a columnas.

¿Cuál es la diferencia entre NoSQL (por ejemplo, CouchDB, Cassandra, MongoDB) y una base de datos orientada a columnas (por ejemplo, Vertica, MonetDB)?


Así es como lo veo: las bases de datos orientadas a columnas tratan la forma en que los datos se almacenan físicamente en el disco. Como sugiere su nombre, cada columna se almacena en su propio espacio / archivo separado. Esto permite 2 cosas importantes:

  1. Usted logra una mejor relación de compresión del orden de 10: 1 porque tiene que tratar con un solo tipo de datos.
  2. Obtiene un mejor rendimiento de lectura de datos porque evita los escaneos de toda la fila y simplemente puede seleccionar y elegir las columnas especificadas en su consulta SELECT.

Por otro lado, NoSQL es una nueva generación de bases de datos que definen niveles agregados "lógicos" para explicar los datos. Algunos tratan los datos como si tuvieran una relación jerárquica (el agregado es un "nodo"), mientras que el otro trata los datos como documentos (que es el nivel agregado). No dictan la estrategia de almacenamiento físico (algunos pueden hacerlo, pero se abstraen del usuario final).

Además, todo el movimiento de NoSQL tiene más que ver con datos no estructurados, o más bien con conjuntos de datos cuyo esquema no se puede predefinir, o se desconoce de antemano, y por lo tanto no puede ajustarse al modelo relacional estricto.

Las bases de datos orientadas a columnas todavía tratan con datos relacionales, aunque eliminan la necesidad de índice, etc.


Como escribió @tuinstoel, el dbmsmusings.blogspot.com/2010/03/… responde a su pregunta en el punto 3:

3. Interfaz. El grupo A se distingue por ser parte del movimiento NoSQL y normalmente no tiene una interfaz SQL tradicional. El grupo B es compatible con las interfaces SQL estándar.


Sugeriría leer la sección de taxonomía de la entrada de Wikipedia de NoSQL para tener una idea de cuán diferentes son las bases de datos NoSQL de una base de datos orientada a esquemas tradicional. Estar orientado a columnas implica filas y columnas, lo que implica un esquema (bidimensional), mientras que las bases de datos NoSQL tienden a ser sin esquema (almacenes de valores clave) o tienen contenidos estructurados pero sin un esquema formal (almacenes de documentos).

Para los almacenes de documentos, la estructura y el contenido de cada "documento" son independientes de otros documentos en la misma "colección". Por lo general, agregar un campo es un cambio de código en lugar de un cambio en la base de datos: los documentos nuevos obtienen una entrada para el campo nuevo, mientras que los documentos más antiguos se consideran que tienen un valor nulo para el campo inexistente. De manera similar, "eliminar" un campo podría significar que simplemente deja de referirse a él en su código en lugar de tener la molestia de eliminarlo de cada documento (a menos que el espacio sea una prima, y ​​luego tiene la opción de eliminar solo aquellos con los mayores contenidos). Contraste esto con la forma en que se debe cambiar una tabla completa para agregar o eliminar una columna en una base de datos de filas / columnas tradicional.

Los documentos también pueden contener listas, así como otros documentos anidados. Aquí hay un documento de muestra de MongoDB (una publicación de un blog u otro foro), representado como JSON:

{ _id : ObjectId("4e77bb3b8a3e000000004f7a"), when : Date("2011-09-19T02:10:11.3Z"), author : "alex", title : "No Free Lunch", text : "This is the text of the post. It could be very long.", tags : [ "business", "ramblings" ], votes : 5, voters : [ "jane", "joe", "spencer", "phyllis", "li" ], comments : [ { who : "jane", when : Date("2011-09-19T04:00:10.112Z"), comment : "I agree." }, { who : "meghan", when : Date("2011-09-20T14:36:06.958Z"), comment : "You must be joking. etc etc ..." } ] }

Observe cómo "comentarios" es una lista de documentos anidados con su propia estructura independiente. Las consultas pueden "llegar" a estos documentos desde el documento externo, por ejemplo, para encontrar publicaciones que tengan comentarios de Jane o publicaciones con comentarios de un determinado rango de fechas.

En resumen, dos de las principales diferencias típicas de las bases de datos NoSQL son la falta de un esquema (formal) y contenidos que van más allá de la orientación bidimensional de una base de datos de filas / columnas tradicional.


Una base de datos NoSQL es un paradigma diferente de las bases de datos basadas en esquemas tradicionales. Están diseñados para escalar y mantener documentos como datos json. Obviamente, tienen una forma de consultar información, pero debe esperar una sintaxis como eval ("persona = * y edad> 10) para recuperar datos. Incluso si son compatibles con la interfaz SQL estándar, están diseñados para otra cosa, por lo que si le gusta SQL usted debe atenerse a las bases de datos tradicionales.

Una base de datos orientada a columnas es diferente de las bases de datos tradicionales orientadas a filas debido a la forma en que almacenan los datos. Al almacenar una columna completa en lugar de una fila, puede minimizar el acceso al disco cuando selecciona unas pocas columnas de una fila que contiene muchas columnas. En las bases de datos orientadas a filas no hay diferencia si selecciona solo uno o todos los campos de una fila.

Tienes que pagar por un inserto más caro sin embargo. Insertar una nueva fila causará muchas operaciones de disco, dependiendo del número de columnas.

Pero no hay diferencia con las bases de datos tradicionales en términos de SQL, ACID, claves externas y cosas por el estilo.



NoSQL es un término utilizado para Not Only SQL , que cubre cuatro categorías principales: bases de datos de valores clave, documentos, familia de columnas y gráficos .

Las bases de datos de valor clave son adecuadas para aplicaciones que tienen lecturas y escrituras pequeñas y frecuentes junto con modelos de datos simples. Estos registros se almacenan y recuperan utilizando una clave que identifica de forma única al registro, y se utiliza para encontrar rápidamente los datos dentro de la base de datos.

Por ejemplo, Redis, Riak, etc.

Las bases de datos de documentos tienen la capacidad de almacenar atributos variables junto con grandes cantidades de datos

por ejemplo, MongoDB, CouchDB etc.

Las bases de datos de la familia de columnas están diseñadas para grandes volúmenes de datos, rendimiento de lectura y escritura, y alta disponibilidad

por ejemplo, Cassandra, HBase, etc.

La base de datos de gráficos es una base de datos que utiliza estructuras de gráficos para consultas semánticas con nodos, bordes y propiedades para representar y almacenar datos

por ejemplo, Neo4j, InfiniteGraph etc.

Antes de entender NoSQL, tienes que entender algunos conceptos clave.

Coherencia : todos los servidores del sistema tendrán la misma información, por lo que cualquier persona que use el sistema obtendrá la misma copia, independientemente del servidor que responda a su solicitud.

Disponibilidad : el sistema siempre responderá a una solicitud (incluso si no es la información más reciente o consistente en todo el sistema o solo un mensaje que indica que el sistema no está funcionando).

Tolerancia de partición : el sistema continúa funcionando como un todo, incluso si fallan o no se pueden alcanzar servidores individuales.

La mayoría de las veces, solo dos de las tres propiedades anteriores serán satisfechas por las bases de datos NoSQL.

De tu pregunta,

CouchDB : AP (Disponibilidad y partición) y base de datos de documentos

Cassandra : AP (Disponibilidad y partición) y base de datos de la familia de columnas

MongoDB : CP (Consistencia y partición) y base de datos de documentos

Vertica : CA (Consistencia y disponibilidad) y base de datos de la familia de columnas

MonetDB : ACID (Durabilidad del aislamiento de la consistencia de la atomicidad) y base de datos relacional

De: http://blog.nahurst.com/visual-guide-to-nosql-systems

Eche un vistazo a este article1 , article2 y ppt para varios escenarios para seleccionar un tipo particular de base de datos.