最终一致性意味着更改需要花费时间进行传播,并且每次操作后数据可能不会处于相同状态,即使对于相同的操作或数据转换也是如此。当人们在与这样的系统交互时不知道他们在做什么时,这会导致非常糟糕的事情发生。
在您充分理解这一概念之前,请不要实施关键业务文档数据存储。修复文档数据存储实现比关系模型更难修复,因为根本不能修复基本的东西,因为修复它所需的东西在生态系统中不存在。如果是RDBMS,重构飞行存储的数据也比简单的ETL转换要困难得多。
并非所有文档存储都是相同的。有些日子(MongoDB)确实支持某种事务,但迁移数据存储可能与重新实现的开销相当。
警告:开发人员甚至是不了解或不了解文档数据存储技术的架构师,并且不敢承认因为害怕失去工作但是经过RDBMS的经典培训并且只知道ACID系统(它们有多么不同) ?)和谁不知道技术或花时间学习它,将错过设计文档数据存储。他们也可以尝试将其用作RDBMS或缓存之类的东西。他们将应该将应该在整个文档上运行的原子事务分解为“关系”部分,忘记复制和延迟是事情,或者更糟糕的是,将第三方系统拖入“事务”。他们会这样做,这样他们的RDBMS可以反映他们的数据湖,而不管它是否可行,并且没有测试,因为他们知道他们在做什么。然后,当存储在单独文档(如“订单”)中的复杂对象具有比预期更少的“订单项目”时,或者根本没有订单项时,他们会感到惊讶。但它不会经常发生,或者经常发生,所以他们只会向前迈进。他们甚至可能没有在开发中遇到问题。然后,他们不会重新设计东西,而是抛出“延迟”,“重试”和“检查”来伪造关系数据模型,这种模型不起作用,但会增加额外的复杂性,没有任何好处。但现在为时已晚 - 事情已经部署,现在业务正在运行。最终,整个系统将被抛弃,部门将被外包,其他人将维护它。它仍然无法正常工作,但它们可以比当前的故障更便宜地失败。