22、分布式数据库的一致性:最终一致性与强一致性解析

分布式数据库的一致性:最终一致性与强一致性解析

一、最终一致性数据库

1.1 Merkle树的应用

Merkle树构建完成后,可用于高效比较各副本集的Merkle树。两个节点交换根节点哈希值,若相等,则分区中存储的对象一致;若不等,则需比较根节点的两个子节点。遍历和数据交换算法会沿着副本树中哈希值不相等的分支继续向下,直至找到叶节点,然后可在相应副本节点上更新陈旧的数据对象。

Merkle树的构建是CPU和内存密集型操作,因此该过程可按需启动、由管理工具启动或定期调度,以在数据库请求负载较低时进行反熵修复,避免增加生产环境中数据库访问的延迟。Riak和Cassandra等NoSQL数据库实现了反熵修复。

1.2 冲突处理

1.2.1 最后写入者获胜(Last Writer Wins)

该方法使用时间戳来决定最终值,数据库确保并发写入时,时间戳最新的更新成为最终版本。但由于机器时钟会漂移,比较时间戳可能无意义,且并发更新时会导致更新被静默丢弃,数据丢失不可避免。若要安全使用仅采用此策略的数据库,需确保所有写入使用唯一键存储数据对象,且对象不可变。

1.2.2 版本向量(Version Vectors)

为处理并发更新且不丢失数据,可使用版本向量。每个唯一数据库对象存储时附带版本号,读写数据流程如下:
- 客户端读取数据库对象时,返回对象及其版本。
- 客户端更新数据库对象时,写入新数据值和上一次读取的对象版本。
- 数据库检查写入请求中的版本是否与数据库中对象的版本相同,若相同则接受写入并增加版本号;若不同,则表示发生冲突,数据库需采取补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值