我不是数据库专家,也没有正式的计算机科学背景,所以请多多包涵。我想知道如果您使用不符合ACID的 v4 之前的旧 MongoDB 版本,可能会发生哪些现实世界的负面事情。这适用于任何不符合 ACID 的数据库。
我知道 MongoDB 可以执行Atomic Operations,但它们不“支持传统的锁定和复杂事务”,主要是出于性能原因。我也了解数据库事务的重要性,以及当您的数据库用于银行时,并且您正在更新几条都需要同步的记录时,您希望事务恢复到初始状态(如果有)停电所以信用等于购买等。
但是当我开始谈论 MongoDB 时,我们这些不了解数据库实际实现方式的技术细节的人开始抛出如下语句:
MongoDB 比 MySQL 和 Postgres 快得多,但它“无法正确保存”的可能性很小,比如百万分之一。
“不会正确保存”部分指的是这种理解:如果在您向 MongoDB 写入的那一刻发生停电,则有可能获得特定记录(例如,您正在跟踪具有 10 个属性的文档中的页面浏览量每个),其中一个文档只保存了 5 个属性……这意味着随着时间的推移,您的浏览量计数器将“略微”关闭。你永远不会知道多少,你知道他们会 99.999% 正确,但不是 100%。这是因为,除非您专门将此作为mongodb 原子操作,否则不能保证该操作是原子的。
所以我的问题是,什么时候以及为什么 MongoDB 不能“正确保存”的正确解释是什么?它不满足 ACID 的哪些部分,在什么情况下,以及您如何知道 0.001% 的数据何时关闭?这不能以某种方式解决吗?如果不是,这似乎意味着您不应该users
在 MongoDB 中存储诸如表之类的东西,因为记录可能不会保存。但是话又说回来,那 1/1,000,000 的用户可能只需要“尝试再次注册”,不是吗?
我只是在寻找一个关于何时/为什么会在像 MongoDB 这样的不符合 ACID 的数据库上发生负面事情的列表,理想情况下,如果有一个标准的解决方法(比如运行后台作业来清理数据,或者只使用 SQL 等) .