分布式数据库中的读写冲突是指读取操作检索到的数据正在被并发写入操作修改,从而导致不一致的情况。 在分布式系统中,数据通常跨多个节点复制以确保可用性和容错能力。 当写入操作更新一个节点上的记录时,此更改需要一段时间才能传播到其他副本。 如果读取操作在此窗口期间访问了过时的副本,则可能会返回过时的数据。 类似地,即使在单个节点内,如果数据库的并发控制机制未能正确隔离操作,并发事务也可能会相互干扰。
例如,假设有一个银行应用程序,其中两个用户访问同一个帐户余额。 用户 A 发起提款,将 Node 1 上的余额从 100 美元更新为 50 美元。 在此更改复制到 Node 2 之前,用户 B 从 Node 2 读取余额,仍然看到 100 美元。 这种不一致就是读写冲突。 在另一个场景中,如果读取操作在价格快速变化期间获取了部分更新的值,则股票交易平台可能会显示不正确的价格。 这些例子说明了分布式系统中的时序和复制延迟如何导致数据视图的冲突。
为了减轻读写冲突,数据库使用版本控制、锁定或共识协议等技术。 例如,版本戳或向量时钟可以跟踪跨节点的数据更改,从而允许读取验证它们是否正在访问最新版本。 一些系统采用强一致性模型(如线性一致性),通过协调通过单个领导者或节点仲裁的读取和写入来确保所有操作都显示为瞬时。 或者,多版本并发控制 (MVCC) 允许读取访问来自特定时间点的数据的一致快照,从而避免与正在进行的写入操作发生干扰。 方法的选择取决于应用程序所需的一致性、延迟和系统复杂性之间的权衡。