宝典目录
- CRDT宝典(一): 引言
- CRDT宝典(二): 基本概念
- CRDT宝典(三): GCounter
- CRDT宝典(四): PNCounter
- CRDT宝典(五): GSet
- CRDT宝典(六): PNSet
- CRDT宝典(七): VClock
- CRDT宝典(八): LLW-Register
- CRDT宝典(九): ORSet
- CRDT宝典(十): AWORSet
- CRDT宝典(十一): Delta-state-AWORSet
- CRDT宝典(十二): DotKernel
- CRDT宝典(十三): Multi-Value-Register
背景
学了这么多state-based CRDT,我们发现merge一般都要解决冲突(除了kernel), 我们比较两个对同一个元素的操作,有四种状态
- 大于
- 小于
- 等于
- 冲突
当状态为冲突时,我们有一些解决冲突的方式,比如
- 基于LLW-Register的last-write-wins策略
- 基于GCounter的Add-Wins策略
可是我们业务有一些场景,需要在实际遇到冲突时,才决定使用什么策略来解决冲突,比如权限问题,权限高的用户可以覆盖权限低的用户,权限低的用户不能覆盖权限高的用户。
这就要求我们的CRDT在遇到冲突时,将冲突抛出,由实际的业务代码来决定使用什么策略来解决冲突。
它有一个专业的名字:多值寄存器,Multi Value Registers。
这个MVR在初始化时,需要业务代码里传入解决冲突的算法,然后将其应用在CRDT上。