database - 非 ACID 数据库合规性对现实世界有哪些影响?

标签 database nosql acid

具体来说,是否存在数据丢失的风险?我正在考虑运行一个密集的事务处理系统,在这个系统中,不丢失任何东西是至关重要的。是否有 NoSQL 用于银行交易处理等任务关键型应用程序的示例?

最佳答案

坦率地说,缺少 ACID 意味着您无法保证原子性、一致性、隔离性或持久性。

如果没有原子性,就无法保证必须同时成功或一起失败的多个操作。例如,如果您的交易要求您一次借记一个账户并贷记另一个账户,在没有原子交易的情况下,您要么必须推出自己的解决方案,要么接受您可以从一个账户借记,而无需进行相应的信用。

如果没有一致性,就无法保证事务的“副作用”起作用 - 在关系数据库中,这就像触发器的触发或外键关系的级联。因此,如果您的交易需要某种自动递增的唯一标识符,则无法保证您会得到一个。

如果没有隔离,就无法保证两个进程不会同时影响数据。例如,一个进程可能会增加字段的值,而第二个进程可能会减少它 - 谁赢了?

如果没有持久性,硬件故障可能会使数据库处于与您预期不同的状态 - 例如,您可能认为更改已写入数据存储,但它在某个内部内存缓冲区中排队,然后消失在薄停电时空气。

或许可以在 NoSQL 上构建一个解决方案,解决不符合 ACID 的问题,但工作量会很大,而且你几乎肯定不会像编写关系数据库的人那样做得好。 ...

关于database - 非 ACID 数据库合规性对现实世界有哪些影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7754219/

相关文章:

sql - 如何乘以表列中的值?

c - c中的"Database"(不是实际的数据库,只是一个简单的事情)

database - 有没有一种查询文档数据库的有效方法?

c# - 使用 RavenDB 时,我应该把业务逻辑放在哪里

nosql - 如何构建 NoSQL 架构以便我可以根据记录属性查询记录?

ios - Core Data 可以在 iOS 上提供什么(如果有的话)ACID 保证?

python - 不是 Django 中 @atomic() 的嵌套版本?

java - 从信息模式中获取oracle中的表名列表

database - Hibernate,将多个列分配为主键

transactions - Cassandra 报告失败但只写了部分怎么办?