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