Bases de datos relacionales frente a columnas y documentos: ¿no son lo mismo?

Entiendo que las bases de datos NoSQL orientadas a documentos son "extensiones" del modelo KV en el sentido de que le permiten consultar más que una sola clave de búsqueda. Pero una vez que algo es un "documento", siento que ya tiene un modelo relacional integrado:

"myJson": {
    "fizz": 4,
    "buzz": "true",
    "widget" : {
        ...etc.
    }
}

Para mí, no veo la diferencia entre este JSON y un json_objects mesa con un fizz y buzz campo, y una relación de clave externa a un segundo widgets mesa.

Y las bases de datos "columnares" como Cassandra simplemente suenan como bases de datos relacionales / de tabla directas.

Entonces pregunto: ¿qué es tan diferente acerca de las bases de datos orientadas a documentos y columnas, y tan distintivas (de los RDBMS) sobre ellas? ¿Qué problemas son más adecuados para resolver que los hacen superiores a los DB relacionales en ciertas circunstancias? ¡Gracias por adelantado!

preguntado el 08 de marzo de 13 a las 21:03

2 Respuestas

En primer lugar, me gustaría decir que tiene mucha razón al decir que NoSql es diferente de las bases de datos relacionales y por eso es difícil hacer una comparación. Dicho esto, hay muchas grandes distinciones entre los dos que se pueden comparar.

Piel escamosa
Aunque puede fragmentar una base de datos MySql, hay cuestiones con fragmentación y hacer cumplir las propiedades ACID cuando un RDMS está en varias máquinas será un gran desafío, las soluciones NoSql como Cassandra son famosas por su capacidad de crecer sin problemas con la gestión de algunos casos 400 nodos en un clúster sin problema. No solo es fácil hacer crecer una base de datos de Cassandra, sino que el rendimiento no se ve afectado.

Esquema(menos) modelo.
Los sistemas de bases de datos NoSQL están desarrollados para gestionar grandes volúmenes de datos que no siguen un esquema fijo. Esto significa que, por ejemplo, si desea agregar una nueva columna a una familia de columnas existente en Cassandra, no necesita volver atrás y modificar la familia de columnas, por lo que no es necesario:

ALTER TABLE table_name ALTER COLUMN column_name datatype;

En su lugar, podemos simplemente agregar nuevas columnas a medida que avanzamos, y podríamos terminar con la siguiente 'tabla':

 key         | follower1  | follower2   | follower2          
-------------+------------+-------------+-----------
 lyubent     | joeb       | chuckn      | gordonf     
 chuckn      | joeb       | gordonf                   
 gordonf     | chuckn                                 
 joeb        | chuckn     | lyubent     | joeb        

Esto permite que los modelos de datos sean flexibles y fáciles de ampliar, pero al hacerlo, los datos se vuelven menos estructurados.

velocidad
Las bases de datos NoSql están optimizadas para altas velocidades de escritura mientras que los RDBM apuntan a altas velocidades de lectura. Pero incluso con eso en mente, las soluciones NoSql todavía tienden a superar a los RDBM sistemas cuando se trata de lecturas. Esto se debe a que las bases de datos NoSql no implementan muchas de las funciones que ralentizan las operaciones de lectura/escritura/actualización en el modelo relacional como, por ejemplo, las propiedades y transacciones de ACID.

Cuándo debería usarse?

  • Su aplicación/sitio web necesitará crecer rápidamente, pero desea comenzar de a poco.
  • Le preocupa más escribir datos que volver a leerlos. (Se publican muchos tweets pero no todos se leen)
  • La disponibilidad de su sistema es más importante que la actualización de los datos al 100%. (Entonces, si usted es un banco, no quiere NoSql, pero si es un sitio web que necesita un 100% de tiempo de actividad, podría ser una buena opción)
  • Si los datos que se escriben deben tener éxito el 100 % del tiempo, pero la consistencia eventual no es un problema.

Solo para una ilustración visual, esto me ayudó mucho a comprender dónde encajan las diferentes soluciones sql en el mundo de la base de datos y cómo cada una se ajusta a un propósito.

Tríada de base de datos: disponibilidad, consistencia y tolerancia de partición

Respondido el 03 de junio de 17 a las 03:06

Ese diagrama es completamente incorrecto, no puede tener CA db. No puede tener A si no es tolerante a la partición. Ese diagrama fue hecho por alguien que entendió mal el teorema CAP. No puede elegir 2, debe elegir entre C o A. codahale.com/you-cant-sacrifice-partition-tolerance Ese enlace fue tuiteado por Brewer (autor del teorema CAP). Solo piénselo, ¿qué propiedad CAP distribuye MySql (fragmentado) que HBase no tiene? Muéstrenme un escenario donde MySql tiene disponibilidad y HBase no. - user1944408

Los sistemas RDBMS garantizan la consistencia y la fragmentación hace que el sistema sea tolerante a la partición. Del teorema se deduce que, por lo tanto, el sistema no puede garantizar la disponibilidad, por lo que los sistemas RDBMS son CP. - user1944408

@ user1944408 Siempre se agradece la crítica, sin embargo, usted dice que el diagrama es completamente incorrecto debido a la posición de HBase y MySql en el diagrama. Pasaste por alto el resto. La imagen ha sido utilizada en varios respuestas a través de SO y por favor lea detenidamente este artículo justificando por qué MySql se colocó como CA, o si no quiere... están ahí para una comparación, es una guía para las bases de datos NoSql, no para las RDBM. - Liuben Todorov

Sé acerca de ese artículo que está mal. Dice que los RDBMS tradicionales como Postgres, MySQL son CA, lo cual no es cierto. No tienen propiedad A. También sé que en muchas respuestas las personas usan este diagrama incorrecto. Hay muchas publicaciones de blog en Internet que interpretan el teorema CAP como "elegir 2", lo cual es incorrecto y, por eso, Brewer dijo que escribirá un nuevo artículo para aclarar por qué eso no es cierto. Nunca dijo en su artículo "elija dos", esa fue solo una interpretación incorrecta. - user1944408

Además, esta fue solo una crítica amistosa que tiene como objetivo aclarar un punto menor en su publicación. Te di +1 por todo lo demás que escribiste. - user1944408

En ninguna base de datos de esquema, no tiene columnas y tipos fijos.

Por ejemplo, el producto 'Jeans' puede tener los atributos 'precio', 'largo' y 'modelo' (M/W), pero para el libro de productos tiene los atributos 'precio', 'autores' y 'título'. Para teléfonos móviles tendrá 'tipo de pantalla', 'sistema operativo', etc.

Es muy difícil modelar eso en RDBMS porque no es flexible y el usuario no puede insertar atributos arbitrarios, por lo que es más fácil usar una base de datos de documentos que esté optimizada para este tipo de datos para que pueda buscar y filtrar fácilmente por valor en atributos arbitrarios (por ejemplo, todos los productos con longitud>30 y modelo=w).

respondido 11 mar '13, 02:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.