database - tutorial - ¿Hay algún almacén de datos NoSQL que sea compatible con ACID?
nosql ventajas y desventajas (28)
NewSQL
Este concepto de colaboradores de Wikipedia define como:
Una clase de sistemas modernos de gestión de bases de datos relacionales que buscan proporcionar el mismo rendimiento escalable de los sistemas NoSQL para las cargas de trabajo de lectura y escritura de procesamiento de transacciones en línea (OLTP)) manteniendo al mismo tiempo las garantías ACID de un sistema de base de datos tradicional.
[1][2][3]
Referencias
[1]
Nancy Lynch y Seth Gilbert, "La conjetura de Brewer y la viabilidad de servicios web consistentes, disponibles y tolerantes a la partición" , ACM SIGACT News, Volumen 33, Número 2 (2002), pág. 51-59.
[2]
"Teorema CAP de Brewer" , julianbrowne.com, obtenido 02-mar-2010
[3]
"Teorema CAP de Brewers en sistemas distribuidos" , royans.net
"NoSQL" no es un término bien definido. Es un concepto muy vago. Como tal, ni siquiera es posible decir qué es y qué no es un producto "NoSQL". No casi todos los productos típicamente marcados con la etiqueta son tiendas clave-valor.
ACID y NoSQL son completamente ortogonales. Uno no implica el otro.
Tengo un cuaderno en mi escritorio, lo uso para guardar notas sobre cosas que todavía tengo que hacer. Este cuaderno es una base de datos NoSQL. Lo consulto utilizando una búsqueda lineal con un "caché de página", por lo que no siempre tengo que buscar en cada página. También cumple con ACID ya que me aseguro de que solo escriba una cosa a la vez y nunca mientras lo estoy leyendo.
NoSQL simplemente significa que no es SQL. Muchas personas se confunden y piensan que significa almacenamiento altamente escalable, salvaje y súper rápido. No es así No significa almacenamiento de clave-valor o consistencia eventual. Todo lo que significa es "no SQL", hay muchas bases de datos en este planeta y la mayoría de ellas no son SQL [cita requerida] .
Puede encontrar muchos ejemplos en las otras respuestas, así que no es necesario que los liste aquí, pero existen bases de datos no SQL con cumplimiento ACID para varias operaciones, algunas son solo ACID para escrituras de objetos individuales, mientras que otras garantizan mucho más. Cada base de datos es diferente.
Asegúrese de leer la introducción de Martin Fowler sobre las bases de datos NoSQL . Y el video correspondiente.
En primer lugar, podemos distinguir dos tipos de bases de datos NoSQL:
- Bases de datos orientadas a agregados;
- Bases de datos orientadas a gráficos (p. Ej., Neo4J).
¡Por diseño, la mayoría de las bases de datos orientadas a gráficos son ACID !
Entonces, ¿qué pasa con los otros tipos?
En bases de datos orientadas a agregados, podemos poner tres subtipos:
- Bases de datos NoSQL basadas en documentos (p. Ej., MongoDB, CouchDB);
- Clave / Valor de bases de datos NoSQL (ej. Redis);
- Bases de datos NoSQL de la familia de columnas (p. Ej., Hibase, Cassandra).
Lo que llamamos un Agregado aquí, es lo que Eric Evans definió en su Diseño Dirigido por Dominio como una autosuficiencia de Entidades y Objetos de Valor en un Contexto Acotado determinado.
Como consecuencia, un agregado es una colección de datos con los que interactuamos como una unidad. Los agregados forman los límites para las operaciones de ACID con la base de datos. (Martin Fowler)
Entonces, a nivel agregado, podemos decir que la mayoría de las bases de datos NoSQL pueden ser tan seguras como los RDBMS de ACID , con la configuración adecuada. De fuente, si sintoniza su servidor para la mejor velocidad, puede entrar en algo que no sea ACID. Pero la replicación ayudará.
Mi punto principal es que debes usar las bases de datos NoSQL tal como están, no como una alternativa (barata) a RDBMS. He visto demasiados proyectos abusando de las relaciones entre documentos. Esto no puede ser ÁCIDO. Si te mantienes en el nivel del documento, es decir, en los límites de Aggregate, no necesitas ninguna transacción. Y sus datos serán tan seguros como con una base de datos ACID, incluso si no es realmente ACID, ya que no necesita esas transacciones. Si necesita transacciones y actualiza varios "documentos" al mismo tiempo, ya no está en el mundo NoSQL, ¡entonces use un motor RDBMS!
El abuelo de NoSQL: ZODB cumple con ACID. http://www.zodb.org/
Sin embargo, es solo Python.
En esta pregunta, alguien debe mencionar a OrientDB : OrientDB es una base de datos NoSQL, una de las pocas que admite transacciones totalmente ACID. ACID no es solo para RDBMS porque no es parte del álgebra relacional. Entonces, es posible tener una base de datos NoSQL que admita ACID.
Esta característica es la que más echo de menos en MongoDB
Espera ha terminado.
Cumple con ACID NoSQL DB está fuera ----------- echa un vistazo a citrusleaf
FoundationDB cumple con el ACID:
Tiene las transacciones adecuadas, por lo que puede actualizar múltiples elementos de datos dispares de forma ACID. Esto se usa como la base para mantener los índices en una capa más alta.
FoundationDB fue mencionado y en ese momento no era de código abierto. Ha sido abierto por Apple hace dos días: https://www.foundationdb.org/blog/foundationdb-is-open-source/
Creo que cumple con el ACID.
Hyperdex Warp http://hyperdex.org/warp/ Warp (función ACID) es propietario, pero Hyperdex es gratis.
Lo publicaré como una respuesta puramente para apoyar la conversación: Tim Mahy , nawroth y CraigTP sugirieron bases de datos viables. CouchDB sería mi preferido debido al uso de Erlang , pero hay otros por ahí.
Yo diría que ACID no contradice o niega el concepto de NoSQL ... Si bien parece haber una tendencia siguiendo la opinión expresada por dove , yo diría que los conceptos son distintos.
NoSQL se basa fundamentalmente en el valor de clave simple (por ejemplo, Redis) o el esquema de documento (pares clave-valor recogidos en un modelo de "documento", por ejemplo, MongoDB) como una alternativa directa al esquema explícito en los RDBMS clásicos. Le permite al desarrollador tratar las cosas de forma asimétrica, mientras que los motores tradicionales han aplicado la misma rigidez en todo el modelo de datos. La razón por la que esto es tan interesante es porque proporciona una forma diferente de lidiar con el cambio , y para conjuntos de datos más grandes ofrece oportunidades interesantes para manejar los volúmenes y el rendimiento.
ACID proporciona los principios que rigen cómo se aplican los cambios a una base de datos. De una manera muy simplificada, dice (mi propia versión):
- (A) cuando haces algo para cambiar una base de datos, el cambio debería funcionar o fallar como un todo
- (C) la base de datos debe permanecer constante (este es un tema bastante amplio)
- (I) si otras cosas están sucediendo al mismo tiempo, no deberían poder ver las cosas a mitad de la actualización
- (D) si el sistema explota (hardware o software), la base de datos debe poder recuperarse; y si dice que terminó de aplicar una actualización, debe ser cierto
La conversación se vuelve un poco más excitable cuando se trata de la idea de propagación y restricciones . Algunos motores RDBMS proporcionan la capacidad de imponer restricciones (por ejemplo, claves externas) que pueden tener elementos de propagación (a la cascada ). En términos más simples, una "cosa" puede tener una relación con otra "cosa" en la base de datos, y si cambia un atributo de uno puede requerir que el otro sea cambiado (actualizado, eliminado, ... muchas opciones). Las bases de datos NoSQL , que se centran predominantemente (por el momento) en altos volúmenes de datos y alto tráfico, parecen estar abordando la idea de actualizaciones distribuidas que tienen lugar dentro de marcos de tiempo arbitrarios (desde la perspectiva del consumidor). Esta es básicamente una forma especializada de replication administrada a través de transaction , por lo que yo diría que si una base de datos distribuida tradicional puede soportar ACID, también lo haría una base de datos NoSQL.
Algunos recursos para lecturas adicionales:
MarkLogic también es compatible con ACID. Creo que es uno de los jugadores más grandes ahora.
MongoDB anunció que su versión 4.0 será compatible con ACID para transacciones de múltiples documentos.
Versión 4.2. se supone que es compatible con configuraciones fragmentadas.
https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb
No solo NoSQL no es compatible con ACID por diseño. El movimiento NoSQL abarca BASE (Basicamente Disponible, Estado Suave, Consistencia eventual) que se afirma que es lo opuesto a ACID. La base de datos NoSQL a menudo se llama base de datos Consistente. Para comprender las diferencias, debe profundizar en el teorema CAP (también conocido como el teorema de Brewer)
Visite http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
Node levelUP es transaccional y está construido en leveldb https://github.com/rvagg/node-levelup#batch
Para agregar a la lista de alternativas, otra base de datos Completamente compatible con ACID NoSQL es GT.M.
Sí, MarkLogic Server es una solución NoSQL (base de datos de documentos que me gusta llamar) que funciona con transacciones ACID
Si bien es solo un motor integrado y no un servidor, leveldb tiene WriteBatch y la capacidad de activar las escrituras sincrónicas para proporcionar un comportamiento ACID.
Si está buscando una tienda clave / valor que cumpla con ACID, está Berkeley DB . Entre las bases de datos de gráficos, al menos, Neo4j e HyperGraphDB ofrecen transacciones ACID (HyperGraphDB realmente usa Berkeley DB para almacenamiento de bajo nivel en este momento).
Tarantool es una base de datos completamente ACID NoSQL. Puede ejecutar operaciones CRUD o procedimientos almacenados, todo se ejecutará con estricto acuerdo con una propiedad ACID. También puede leer sobre esto aquí: http://stable.tarantool.org/doc/mpage/data-and-persistence.html
Una gran cantidad de soluciones NoSQL modernas no admiten transacciones ACID (actualizaciones aisladas de múltiples claves atómicas), pero la mayoría de ellas admiten primitivas que le permiten implementar transacciones en el nivel de la aplicación.
Si un almacén de datos admite linealización por clave y comparar y establecer (atomicidad del nivel del documento), entonces es suficiente para implementar las transacciones del lado del cliente, y más de usted tiene varias opciones para elegir:
Si necesita un nivel de aislamiento serializable, puede seguir el mismo algoritmo que utiliza Google para el sistema Percolator o Cockroach Labs para CockroachDB . He escrito un blog sobre él y he creado una visualización paso a paso ; espero que te ayude a comprender la idea principal detrás del algoritmo.
Si espera mucha contención pero está bien que tenga un nivel de aislamiento ReadCommitted, por favor eche un vistazo a las transacciones de RAMP por Peter Bailis.
El tercer enfoque es usar transacciones de compensación también conocidas como el patrón de la saga. Fue descrito a finales de los años 80 en el documento de Sagas , pero se hizo más real con el aumento de los sistemas distribuidos. Consulte la aplicación de la charla de Saga Pattern en busca de inspiración.
La lista de tiendas de datos adecuadas para las transacciones del lado del cliente incluye a Cassandra con transacciones livianas, Riak con cubos consistentes, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB y otros.
de acuerdo con https://wiki.apache.org/couchdb/Technical%20Overview#ACID_Properties couchdb es compatible con ácido
eche un vistazo al teorema CAP
EDITAR: RavenDB parece ser compatible con ACID
BergDB es una base de datos NoSQL liviana de código abierto diseñada desde el comienzo para ejecutar transacciones ACID. En realidad, BergDB es "más" ACID que la mayoría de las bases de datos SQL en el sentido de que la única forma de cambiar el estado de la base de datos es ejecutar transacciones ACID con el mayor nivel de aislamiento (término SQL: "serializable"). Nunca habrá problemas con lecturas sucias, lecturas no repetibles o lecturas fantasmas.
En mi opinión, la base de datos todavía es altamente eficiente; pero no confíes en mí, creé el software. Pruébelo usted mismo en su lugar.
VoltDB es un participante que reclama el cumplimiento de ACID, y aunque aún usa SQL, sus objetivos son los mismos en términos de escalabilidad.
YugaByte DB es compatible con un Txns distribuido compatible con ACID , así como con la compatibilidad de API Redis y CQL en la capa de consulta.
ACTUALIZACIÓN (27 de julio de 2012): el enlace al artículo de Wikipedia se ha actualizado para reflejar la versión del artículo que estaba actualizado cuando se publicó esta respuesta. Tenga en cuenta que el artículo actual de Wikipedia ha sido ampliamente revisado.
Bueno, según una versión anterior de un artículo de Wikipedia sobre NoSQL :
NoSQL es un movimiento que promueve una clase poco definida de almacenes de datos no relacionales que rompen con una larga historia de bases de datos relacionales y garantías de ACID.
y también:
El nombre fue un intento de describir la aparición de un número creciente de almacenes de datos distribuidos y no relacionales que a menudo no intentaban proporcionar garantías de ACID.
y
Los sistemas NoSQL a menudo ofrecen garantías de coherencia débiles, como la coherencia final y las transacciones restringidas a elementos de datos únicos, aunque uno puede imponer garantías ACID completas al agregar una capa de middleware adicional.
Entonces, en pocas palabras, diría que uno de los principales beneficios de un almacén de datos "NoSQL" es su clara falta de propiedades ACID . Además, en mi humilde opinión, cuanto más se intenta implementar y hacer cumplir ACID propiedades de ACID , más lejos del "espíritu" de un almacén de datos "NoSQL" se obtiene, y más cerca de un RDBMS "verdadero" se obtiene (hablando en términos relativos, por supuesto )
Sin embargo, todo lo dicho, "NoSQL" es un término muy vago y está abierto a las interpretaciones individuales, y depende en gran medida de la cantidad de punto de vista purista que tenga. Por ejemplo, la mayoría de los sistemas RDBMS modernos actualmente no se adhieren a todas las 12 reglas de su modelo de relación de Edgar F. Codd .
Adoptando un enfoque pragmático, parecería que el CouchDB de Apache es el que más se aproxima a la incorporación de la conformidad con ACID a la vez que conserva la mentalidad "NoSQL" no relacional y poco laxa.
db4o
A diferencia de la persistencia o serialización del propio proceso, db4o es una transacción ACID segura y permite consultas, replicación y cambios de esquema durante el tiempo de ejecución