¿Las bases de datos NoSQL pueden ocasionar la pérdida ocasional de datos?


8

Actualmente estoy evaluando bases de datos para usar en un nuevo proyecto, que requerirá la inserción y consulta de grandes cantidades de datos comerciales. Nuestro equipo se está inclinando hacia Cassandra, pero luego leí este artículo que parece sugerir que el uso de bases de datos no compatibles con ACID puede ocasionar la pérdida ocasional de datos:

http://www.dbms2.com/2010/09/21/acid-compliant-transaction-integrity/

No puedo encontrar más información sobre esto en la web y no puedo entender cómo el incumplimiento de ACID significa que puede ocurrir la pérdida de datos. ¿Alguien puede arrojar algo de luz?


Neo4j es una base de datos NOSQL (gráfica) que en realidad cumple con ACID . Viene con soporte completo de transacciones y persistencia duradera. Neo4j también usa registros de transacciones para asegurar las operaciones de escritura antes de aplicarlas al almacén de datos. Descargo de responsabilidad: trabajo para Neo Technology.
Michael Hunger

3
De acuerdo con la ley de Murphy (y mi propia experiencia) puede perder datos con cualquier base de datos.
a_horse_with_no_name

Una mejor redacción podría ser "¿las bases de datos NoSQL tienen una probabilidad significativamente mayor de pérdida de datos o corrupción que el RDBMS tradicional?" Todavía un poco vago.
Jon of All Trades

Varios productos NoSQL ofrecen ACIDity de una sola fila. Pocos ofrecen ACID de varias filas. Si su caso de uso es una secuencia de escritura de una sola clave, entonces puede tener éxito. Con muchas áreas de negocio, es importante tener varias filas consistentes simultáneamente antes de efectuar un cambio.
Michael Green

Respuestas:


6

ACID significa

  • Atomicidad
  • Consistencia
  • Aislamiento
  • Durabilidad

Lo que esto significa para usted es que "cada acción de escritura se realizará solo una vez (sin registros duplicados), pero se almacenará por completo en la base de datos cuando se realice la acción" y que cada vez que lea, obtendrá los datos que desea. .

Lo que pasa con las bases de datos NoSQL es que a menudo se distribuyen (eso es lo que la gente quiere, sistemas escalables planos que son baratos), lo que significa que lleva tiempo replicar los datos en todos los nodos. A veces es posible leer durante una escritura y terminar con los datos antiguos mientras salen los nuevos.

Estás sacrificando la pureza por la velocidad.

Esta es la versión corta de mi respuesta, y no estoy seguro de qué necesito explicar más. ¡Hazme preguntas!


1
Lo que está describiendo suena como consistencia inmediata (RDBMS) versus consistencia eventual (NoSQL). Sin embargo, el artículo vinculado habla sobre la pérdida de datos (no solo por tener datos inconsistentes), y no entiendo qué tiene que ver el cumplimiento de ACID con la pérdida de datos.
del

1
Durabilidad más probable. Y ese es el caso, eso es lo que estoy describiendo (lo que hace que parezca que se han perdido datos). El punto de ACID es que no puede perder datos. Siempre. (bueno, podría perderse por daños)
jcolebrand

Todas las bases de datos NoSQL que he buscado (HBase, Cassandra, Redis) usan registros de escritura anticipada que pueden reproducirse en caso de que la base de datos se bloquee antes de que los cambios hayan persistido. ¿Eso significa que esta crítica no se aplica a ninguna de estas bases de datos?
del

Me lo imagino. Volveré sobre esto mañana, pero por ahora, antes de acostarse. Espero que tenga alguna otra entrada además de la mía antes de eso ;-)
jcolebrand

6

Aunque esta es una pregunta de años ...

En resumen, puede entender ACID como garantía de integridad / seguridad de los datos en cualquier circunstancia esperada . Al igual que en la programación genérica, todos los dolores de cabeza provienen de subprocesos múltiples.

El mayor problema en NoSQL es principalmente ACI. D (urabilidad) suele ser un problema separado.

Si su base de datos es de un solo subproceso, por lo que solo un usuario puede acceder a la vez, eso es nativamente compatible con ACI. Pero estoy seguro de que prácticamente ningún servidor puede tener este lujo.

Si su base de datos necesita ser multiproceso (servir a múltiples usuarios / clientes simultáneamente), debe necesitar una transacción compatible con ACI. O obtendrá corrupción de datos silenciosa en lugar de una simple pérdida de datos. Lo cual es mucho más horrible. Simplemente, esto es exactamente lo mismo con la programación genérica de subprocesos múltiples. Si no tiene un mecanismo adecuado como el bloqueo, obtendrá datos indefinidos. Y el mecanismo en DB llamó el cumplimiento total de ACID .

Muchas bases de datos YesSQL / NoSQL se anuncian a sí mismas compatibles con ACID, pero en realidad, muy pocas de ellas lo hacen.

  • Sin cumplimiento de ACID = Obtendrá resultados siempre indefinidos en un entorno multiusuario (cliente). Ni siquiera pienso qué tipo de DB hace esto.

  • Fila única / clave compatible con ACID = Obtendrá un resultado garantizado si modifica solo un valor a la vez. Pero resultado indefinido (= corrupción de datos silenciosa) para la actualización simultánea de múltiples filas / claves. La mayoría de las bases de datos NoSQL actualmente populares, incluidas Cassandra, MongoDB, CouchDB, ... Este tipo de bases de datos son seguras solo para transacciones de una sola fila. Por lo tanto, debe garantizar que su lógica de base de datos no toque varias filas en una transacción.

  • Cumplimiento de ACID de múltiples filas / claves = Siempre obtendrá resultados garantizados para cualquier operación. Estos son requisitos mínimos como un RDBMS. En el campo NoSQL, muy pocos de ellos hacen esto. Llave inglesa, MarkLogic, VoltDB, FoundationDB. Ni siquiera estoy seguro de que haya más soluciones. Este tipo de bases de datos son realmente nuevas y frescas, por lo que no se sabe nada sobre su capacidad o limitación.

De todos modos, esta es una comparación, excepto D (urabilidad). Así que no olvides comprobar también el atributo de durabilidad. Es muy difícil comparar la durabilidad porque el rango se vuelve demasiado amplio. No conozco bien este tema ...

  • Sin durabilidad. Perderá datos en cualquier momento.

  • Almacenado de forma segura en el disco. Cuando llegue COMMIT OK, los datos están garantizados en el disco. Perdió datos si se rompe el disco.

Además, hay diferencias incluso en las bases de datos compatibles con ACID.

  • A veces cumple con ACID / necesita configuración / no hay algo automático .. / algunos componentes no cumplen con ACID / muy rápido pero necesita apagar algo para esto ... / Cumple con ACID si usa un módulo específico ... = nosotros no agrupará la seguridad de los datos por defecto. Es un complemento, una opción o una venta por separado. No olvide descargar, ensamblar, configurar y emitir el comando adecuado. De todos modos, la seguridad de los datos puede ignorarse en silencio. Hazlo tu mismo. Compruébalo tú mismo. Buena suerte para no cometer ningún error. Todos en su equipo deben ser DBA perfectos para usar este tipo de DB de manera segura. MySQL

  • Siempre compatible con ACID = No intercambiamos seguridad de datos con rendimiento ni nada. La seguridad de los datos es un paquete forzado con este paquete de base de datos. La mayoría de los RDBMS comerciales, PostgreSQL.

Arriba está la implementación típica de DB. Pero aún así, cualquier otra falla de hardware puede dañar la base de datos. Como error de memoria, error de canal de datos o cualquier otro error posible. Por lo tanto, necesita redundancia adicional, y la DB de calidad de producción real debe ofrecer características de tolerancia a fallas.

  • Sin redundancia Pierdes todos los datos si tus datos están dañados.

  • Apoyo. Realiza una copia instantánea / restauración. Pierde datos después de la última copia de seguridad.

  • Copia de seguridad en línea. Puede hacer una copia de seguridad de la instantánea mientras se ejecuta la base de datos.

  • Replicación asincrónica. Copia de seguridad por cada segundo (o período especificado). Si la máquina está apagada, esta base de datos garantiza recuperar los datos simplemente reiniciando. Pierdes datos después del último segundo.

  • Replicación sincrónica. Copia de seguridad inmediata para cada actualización de datos. Siempre tiene una copia exacta de los datos originales. Use la copia si el origen se rompe.

Hasta ahora, veo que muchas implementaciones de bases de datos carecen de muchas de estas. Y creo que si carecen de ACID y soporte de redundancia adecuados, los usuarios eventualmente perderán datos.


5

"Depende" es la respuesta: hay opciones de configuración, mencionadas aquí .

Pequeño problema: una base de datos puede ser duradera pero no compatible con ACID, ya que ACID es el superconjunto de características (ACID). No creo que ninguna base de datos NoSQL pueda afirmar que es completamente ACID, pero muchos de ellos pueden afirmar que cumplen requisitos secundarios individuales, como la durabilidad.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.