我在阅读设计数据密集型应用程序时迷失了方向。
在非分布式数据库系统中,非分布式事务满足ACID。
在分布式数据存储中,要满足哪些分布式事务?
答案不一定来自这本书。我也在寻找关于分布式系统的书籍(例如Coulouris或Tanenbaum的书籍)和数据库系统(例如Silberschatz的书)的答案,但我太困惑了,找不到答案。
谢谢。
发布于 2019-12-26 23:33:26
我认为您正在寻找“基础”(基本可用,软状态,最终一致性)。对于分布式数据库来说,碱基通常被认为是一种可接受的替代ACID的方法,或者说是最少的一种。
我喜欢酸碱的这个解释:
另请参阅:
关于分布式数据库的一致性,来自论文“关于分布式数据库的说明”:
分布式环境中的事务可以将所有数据作为单个副本存储在单个站点的外观存档。对于未复制的数据,已表明分布式数据库管理系统只需遵守非分布式数据库管理的规则:
对于复制的数据,需要另外两项原则来存档单个站点、单一副本的等效性:
结果表明,这四个条件足以保证单拷贝、单站点、串行用户系统的等效性。
本文讨论了各种更新策略和分布式事务管理等。
无论我们是否要求所有节点就事务达成一致,认为事务已经完成,都是一个实现细节。基只要求节点最终在事务完成后的某个点达成一致。
关于一致性的问题,如CAP。基类不能保证返回最新的值。只有这样,如果不再发生写操作,并且客户端继续阅读,它最终将获得最新的价值。也就是说,读到的可能是一种落后的状态。然而,这种状态是有效的,事务的原子性质被保留下来。
另一方面,基本也不要求将数据复制到所有节点以返回数据。根据实现的不同,有可能在尚未将其复制到所有节点时将最最新的值返回给客户端。
发布于 2020-01-03 01:00:25
在非分布式数据库系统中,非分布式事务满足ACID。
是。
在分布式数据存储中,要满足哪些分布式事务?
但是在分布式系统上。
队列系统中有一条数据消息,例如,要插入到多个数据库表中的AMQP。因此有两个系统:队列系统和数据库系统。例如,如果数据库中的一个插入失败,您希望撤消整个操作( ACID中的原子性就是这样),因此消息仍然应该在队列系统(而不是删除)中(ACID中的一致性)。
如果您在设计数据密集型应用程序的伟大书籍中读到更多,您将看到“分布式事务”通常使用两阶段提交来实现,这是一种(不太好的-可能会阻塞系统)的特殊情况下的协商一致算法。一个更好的协商一致算法是木筏 (无阻塞).现在已经避免了分布式事务(使用两阶段提交),取而代之的是采用乐观算法(如Raft )的系统。
https://softwareengineering.stackexchange.com/questions/402984
复制相似问题