具体来说,是否存在数据丢失的风险?我正在考虑运行一个密集型事务处理系统,其中最重要的是不要丢失任何内容。是否有在银行交易处理等关键任务应用程序中使用 NoSQL 的示例?
坦白说,缺乏 ACID 意味着您无法保证原子性、一致性、隔离性或持久性。
如果没有原子性,您就无法保证必须一起成功或一起失败的多个操作都会这样做。例如,如果您的交易要求您一次性借记一个账户并贷记另一个账户,在没有原子交易的情况下,您要么必须推出自己的解决方案,要么接受您可以借记一个账户,而不需要进行任何操作。相应的信用。
如果没有一致性,就无法保证事务的“副作用”起作用 - 在关系数据库中,这就是触发器的触发或外键关系的级联。因此,如果您的交易需要某种自动递增的唯一标识符,则无法保证您一定会得到。
如果没有隔离,就无法保证两个进程不会同时影响数据。例如,一个进程可能会增加某个字段的值,而第二个进程可能会减少该字段的值 - 谁赢了?
如果没有持久性,硬件故障可能会使数据库处于与您预期不同的状态 - 例如,您可能认为更改已写入数据存储,但它已在某些内部内存缓冲区中排队,并且如果有的话就会消失得无影无踪。电源故障。
可能可以在 NoSQL 上构建一个解决方案,解决缺乏 ACID 合规性的问题,但是工作量将是巨大的,而且你几乎肯定不会像编写关系数据库的人那样做得好......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)