我不是数据库专家,也没有正式的计算机科学背景,所以请耐心等待。我想知道如果您使用v4之前的旧MongoDB版本(不兼容ACID)会在现实世界中产生负面影响。这适用于任何不符合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用户可能只需要“尝试再次注册”,不是吗?
我只是在寻找与ACID不兼容的数据库(例如MongoDB)何时/为什么会发生负面事件的列表,并且理想情况下是否存在标准的解决方法(例如运行后台作业以清理数据,或仅使用SQL进行此操作等)。 。