形式陈述 ​
本页固定 operation-based OR-Set。副本状态是 live pair 集合
其中 dot
源副本执行 remove 时,prepare 先冻结自己已观察到的 tags:
再广播
协议依赖操作型 CRDT 的因果交付:
经典 op-based 定理还要求 eventual delivery 和逻辑恰一次。若传输 at-least-once,重复 add 必须按 dot 去重;否则 remove 后迟到的 add 副本可能重新插入同一 pair。
直觉
删除元素名“x”没有说明删的是哪一次加入。OR-Set 把每次加入看成一张独立票据,remove 只能撕掉手中已经见过的票据。分区另一侧新开的票据不可能被当前 remove 预知,因此保留。
这个规则把并发冲突变成可检查的因果问题,而不是依赖消息到达顺序。所有副本最终拿到相同 add dots 和 remove tag sets 后,无论并发消息怎样穿插,live pair 集都相同。
Dot 不应被复用。若 actor 重启后再次产生
例子与边界
A 添加
B 收到它后执行 remove,冻结
所以
若 C 先观察 B 的 remove,再添加
朴素 two-phase set 用 add-set 减 remove-set 且按元素名永久禁用重加,语义不同;朴素 LWW-set 又按 marker 选赢家。它们都不能只换名字叫 OR-Set。过早丢掉 remove 的去重或稳定性证据,还会让离线副本重传
推论与应用
OR-Set 适合成员标签、购物车和协作选择,其中并发 add 应优先。若业务需要 remove-wins,应让并发 remove 能覆盖未观察 add,必须使用不同因果机制和证明,不能把
状态型优化可把 live dots 与 causal context 合并,避免为每个删除永久保留显式 tombstone;其 merge 仍要区分“对方没见 dot”和“对方已见并删除 dot”。本页的 op-based 定义则把这一区分冻结在 remove effector 与交付合同中。
参考资料
- Marc Shapiro et al., “A Comprehensive Study of Convergent and Commutative Replicated Data Types,” INRIA RR-7506, 2011, OR-Set specification.
- Annette Bieniusa et al., “An Optimized Conflict-Free Replicated Set,” arXiv:1210.3368, 2012.
- Paulo Sérgio Almeida, “Approaches to Conflict-Free Replicated Data Types,” ACM Computing Surveys 56(3), Article 76, 2024, Sec. 5.1.