¿Cuáles son las diferencias entre NoSQL y un RDBMS tradicional?

71

¿Cuáles son las diferencias entre NoSQL y un RDBMS tradicional?

En los últimos meses, NoSQL ha sido mencionado con frecuencia en las noticias técnicas. ¿Cuáles son sus características más significativas en relación con un RDBMS tradicional? ¿A qué nivel (físico, lógico) ocurren las diferencias?

¿Dónde están los mejores lugares para usar NoSQL? ¿Por qué?

Spredzy
fuente

Respuestas:

61

NoSQL significa "No solo SQL" y generalmente significa que la base de datos no es una base de datos relacional, que ha sido muy popular en las últimas décadas.

La razón por la que NoSQL ha sido tan popular en los últimos años es principalmente porque, cuando una base de datos relacional crece de un servidor, ya no es tan fácil de usar. En otras palabras, no se escalan muy bien en un sistema distribuido. Todos los sitios grandes que mencionó Google, Yahoo, Facebook y Amazon (no sé mucho sobre Digg) tienen muchos datos y almacenan los datos en sistemas distribuidos por varias razones. Puede ser que los datos no quepan en un servidor o que existan requisitos para una alta disponibilidad .

Teorema de la PAC

El teorema de CAP puede describir las propiedades de un sistema distribuido . De las tres propiedades solo puede tener como máximo dos:

  • C OHERENCIA
  • A DISPONIBILIDAD
  • tolerancia a la red P articulación

Amazon Dynamo utiliza la coherencia eventual para acercarse y obtener las tres propiedades. Vale la pena leer el documento Dynamo: la tienda de valor-clave altamente disponible de Amazon al aprender sobre bases de datos NoSQL y sistemas distribuidos. Amazon Dynamo tiene las propiedades A y P.

Google adopta un enfoque diferente con BigTable , que tiene las propiedades C y A.

Otras bases de datos NoSQL

Como escribí al principio, hay muchos otros tipos de bases de datos NoSQL, que están diseñadas para diferentes requisitos. Por ejemplo, bases de datos de gráficos como Neo4j , bases de datos de documentos como CouchDB y bases de datos multimodelo / objeto como OrientDB .

Finalmente, me gustaría decir que las bases de datos relacionales seguirán siendo populares. Son muy flexibles y mantenibles. Pero no siempre son la mejor opción.

Jonas
fuente
1
Buena respuesta exhaustiva.
TML
NoSQL NO significa no relacional, solo significa algo más que un DBMS SQL.
nvogel
1
Parece que en la reciente Conferencia O'Reilly Strata, Mark Madsen ha acuñado una nueva interpretación de "NoSQL" en su historia de bases de datos en la noción para reemplazar "No solo SQL". Ahora es: "No, SQL" ;-)
Lukas Eder
66
"No solo" fue una modificación, el primer movimiento NoSQL fue rabiosamente contra bases de datos relacionales. Luego golpearon el mundo real.
Cayo
22

NoSQL es un término muy amplio y generalmente se conoce como "No solo SQL". El término está cayendo en desgracia en la comunidad no RDBMS.

Encontrará que la base de datos NoSQL tiene pocas características comunes. Se pueden dividir aproximadamente en algunas categorías:

  • tiendas de clave / valor
  • Bases de datos inspiradas en Bigtable (basadas en el documento de Google Bigtable)
  • Bases de datos inspiradas en Dynamo
  • bases de datos distribuidas
  • bases de datos de documentos

Esta es una gran pregunta, pero está bastante bien respondida en esta Encuesta de bases de datos distribuidas .

Para una respuesta corta:

Las bases de datos NoSQL pueden prescindir de varias partes de ACID para lograr ciertos otros beneficios: tolerancia de partición, rendimiento, distribución de carga o escala lineal con la adición de nuevo hardware.

En cuanto a cuándo usarlos, eso depende completamente de las necesidades de su aplicación.

Jeremiah Peschka
fuente
12

NoSQL es un tipo de base de datos que no tiene un esquema fijo como lo hace un RDBMS tradicional. Con las bases de datos NoSQL, el desarrollador define el esquema en tiempo de ejecución. No escriben sentencias SQL normales en la base de datos, sino que usan una API para obtener los datos que necesitan. Las bases de datos NoSQL generalmente pueden escalar fácilmente a través de diferentes servidores físicos sin necesidad de saber en qué servidor están los datos que está buscando.

Sin embargo, hay algunas compensaciones por toda esta flexibilidad: las bases de datos NoSQL carecen de características en comparación con los sistemas RDBMS como SQL Server, Oracle, DB2, MySQL, etc. No hay Service Broker, registro de transacciones, paquetes ETL, etc.

NoSQL no es algo nuevo. En realidad ha existido durante 50-60 años. En aquel entonces se llamaba COBOL. La misma idea exacta, solo un grupo diferente se le ocurrió.

mrdenny
fuente
3
El punto 1 es incorrecto para muchas (¿todas?) Bases de datos NoSQL a menos que le haya dicho explícitamente a la base de datos que no le importa si las escrituras tienen éxito. Por ejemplo, cualquier base de datos respaldada por Hadoop escribirá los datos en tres ubicaciones en el infierno o en aguas altas. Por defecto, Cassandra escribirá en tres ubicaciones y reconocerá que la escritura es exitosa cuando dos lo hayan logrado.
Jeremiah Peschka
3
¿Cómo maneja la concurrencia al hacer esas actualizaciones? ¿Existe una transacción de tipo distribuido que va entre ellos o la escritura ACK se realiza de antemano y los servidores manejan el resto en segundo plano?
mrdenny
La concurrencia depende completamente de la implementación. Riak utiliza relojes vectoriales para garantizar la concurrencia y, en caso de escrituras en conflicto, pueden devolverse a la aplicación de llamada para su resolución. Otros usan una última escritura gana.
Jeremiah Peschka
En cuanto al reconocimiento de escritura, en la mayoría de los casos, las escrituras no se reconocen hasta que el sistema operativo reconoce la escritura. Incluso puede ir tan lejos como para solicitar el reconocimiento de escrituras duraderas, lo que significa que los bits se vacían en el disco en lugar de estar en el buffer del sistema operativo. MongoDB reconoce las escrituras en la memoria de manera predeterminada, pero se puede configurar para requerir el reconocimiento de escritura en el disco. La replicación se maneja de manera diferente con cada producto. Con Hadoop, el cliente escribe en el servidor A, que escribe en B, que escribe en C. Una vez que C responde, la escritura está completa y el cliente recibe un reconocimiento de escritura.
Jeremiah Peschka
En ese caso estoy corregido. He eliminado la declaración incorrecta. ¿FUBAR algo más?
mrdenny
6

Básicamente, prescindir de la configuración relacional, con claves primarias y externas, y con la sobrecarga adicional involucrada en mantener la seguridad de las transacciones, a menudo le brinda incrementos extremos en el rendimiento. Sin embargo, esto no es exclusivo de las nuevas bases de datos / almacenes de datos, ya que, por ejemplo, MySQL se ha ajustado para funcionar en "niveles NoSQL" al pasar por alto las capas.

En resumen, a menudo puede obtener un rendimiento impresionante si está de acuerdo con el riesgo de perder datos. La mayoría de los sistemas NoSQL hacen esto. Por ejemplo, MongoDB realiza cambios de datos para que se escriban cuando sea conveniente. Los datos en sí son seguros y transaccionalmente seguros, pero se mantienen en un almacenamiento volátil (memoria). Si pierde energía, no puede estar 100% seguro de que no ha perdido datos o de que no tiene datos corruptos.

Es una compensación entre seguridad y rendimiento.

Johanna Larsson
fuente
5

Un buen lugar para comenzar es la entrada de Wikipedia . Esencialmente, en lugar de relacionar datos en una tabla con otra, almacena cosas como pares de valores clave y no hay un esquema de base de datos, sino que se maneja en código.

Algunos sitios usan NoSQL y los servidores RDBMS típicos al mismo tiempo, pero para almacenar datos diferentes. Por lo tanto, no tiene que elegir uno u otro.

steve.lippert
fuente
El hecho de que la mayor parte de esta pregunta pueda responderse yendo a WP me hace frotar mi barbilla mientras contemplo las respuestas aquí. Creo que es un poco demasiado "pregunta de relleno", pero eso es realmente todo lo que tenemos en este momento.
jcolebrand
1
La nota importante aquí es que evitar el soporte de las relaciones (clave externa) en la infraestructura de la base de datos / servidor alivia la base de datos / servidores de la carga y la sobrecarga de administración de bloqueos de mantener la integridad referencial. La consecuencia de esto, la compensación, es que la integridad referencial, la coherencia y las otras preocupaciones de ACID se envían a las aplicaciones. Muchas aplicaciones se benefician de esto en lugar de estar limitadas por él. (Algunas aplicaciones deben encajarse en el modelo cliente / servidor).
Jim Dennis
0

He trabajado mucho en la base de datos MongoDB NoSQL y Oracle.

Esquema

La base de datos SQL tiene su propio esquema predefinido para almacenar datos estructurados.

En la base de datos NoSQL, no hay un esquema predefinido, aquí el esquema es el elemento más dinámico basado en los elementos de datos.

Escalabilidad

Las bases de datos SQL son escalables verticalmente, lo que significa que si queremos escalar la base de datos base de SQL, necesitamos dar un impulso de hardware en el que está instalado el sistema DBMS. Aquí es donde a veces va la limitación de la escalabilidad.

Las bases de datos NoSQL son escalables horizontalmente, lo que significa que si queremos escalarlo, necesitamos agregar más nodos y crear una red de distribución basada en nuestra propia necesidad y potencia requerida. Así es como reducen la carga en la base de datos

Recuperación de datos

En las bases de datos basadas en SQL, para definir y manipular datos podemos usar SQL (lenguaje de consulta estructurado), que es muy poderoso hoy en día.

En términos de la base de datos NoSQL, las consultas se centran en la recopilación y los documentos. A veces se llama UnQL (lenguaje de consulta no estructurado). Esto todavía está en la fase de evolución, por lo que varía de un proveedor a otro de la base de datos NoSQL.

Para más información sobre las diferencias clave, mi blog: Diferencia entre SQL y la base de datos NoSQL

Virat Gaywala
fuente