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