Data structures 是添加/删除集CRDT';什么是单调的?
添加/删除集CRDT的内部是单调的,因为我们只向内部集添加,所以CRDT的内部状态在逻辑时间上永远不会倒退 然而,CRDT的观察状态是我们添加和删除元素,所以观察状态不必是单调的 如果我们将这些系统链接在一起,并根据元素的存在性或不存在性采取行动,它看起来就不再单调了。最终的状态最终仍将收敛,但在稳定之前,我们可能会或可能不会在一段时间内看到某些元素。由于中间状态,例如用户读取系统状态并在其收敛之前作出反应,因此不太可能发生某些副作用Data structures 是添加/删除集CRDT';什么是单调的?,data-structures,distribution,crdt,Data Structures,Distribution,Crdt,添加/删除集CRDT的内部是单调的,因为我们只向内部集添加,所以CRDT的内部状态在逻辑时间上永远不会倒退 然而,CRDT的观察状态是我们添加和删除元素,所以观察状态不必是单调的 如果我们将这些系统链接在一起,并根据元素的存在性或不存在性采取行动,它看起来就不再单调了。最终的状态最终仍将收敛,但在稳定之前,我们可能会或可能不会在一段时间内看到某些元素。由于中间状态,例如用户读取系统状态并在其收敛之前作出反应,因此不太可能发生某些副作用 CRDT是单调的意味着什么 CRDT表示无冲突的复制数据类型
CRDT是单调的意味着什么 CRDT表示无冲突的复制数据类型 这意味着(发散的)CRDT实例可能合并在一起(以任何顺序和重复),最终进入正确、一致的状态 单调性可能有助于实现这一点(参见CALM——一致性是逻辑单调性)。但这不是set实例的要求 阅读crdt上的注释: CRDT集的一些示例如下:
- G-集(仅增长集,仅添加项)
- 2P套件(保留墓碑,元素只能插入一次)
- LWW集合使用时间戳标记添加/删除项目的“时间”,允许多次添加/删除项目。并发添加 使用偏差确定移除
- 或集合-类似于lww集合,但使用唯一的标记来确定要删除的元素
- 优化或设置-可以在周围没有很多墓碑的情况下使用,如果您的设置很大(并且有很多墓碑),请查看这些墓碑 变化)
观察到的(大多数)CRDT集的非单调性并不使CRDT单调性失效 支持删除操作的CRDT集的核心是两个G集:
- 其中一个G集是添加的元素集
- 另一个G集是被移除的元素集
观察到的状态是添加的元素集减去删除的元素集。尽管每个内部集合都是明显单调的,但它们的差异似乎是非单调的。什么是CRDT?有合适的标签吗?