Data structures 是添加/删除集CRDT';什么是单调的?

Data structures 是添加/删除集CRDT';什么是单调的?,data-structures,distribution,crdt,Data Structures,Distribution,Crdt,添加/删除集CRDT的内部是单调的,因为我们只向内部集添加,所以CRDT的内部状态在逻辑时间上永远不会倒退 然而,CRDT的观察状态是我们添加和删除元素,所以观察状态不必是单调的 如果我们将这些系统链接在一起,并根据元素的存在性或不存在性采取行动,它看起来就不再单调了。最终的状态最终仍将收敛,但在稳定之前,我们可能会或可能不会在一段时间内看到某些元素。由于中间状态,例如用户读取系统状态并在其收敛之前作出反应,因此不太可能发生某些副作用 CRDT是单调的意味着什么 CRDT表示无冲突的复制数据类型

添加/删除集CRDT的内部是单调的,因为我们只向内部集添加,所以CRDT的内部状态在逻辑时间上永远不会倒退

然而,CRDT的观察状态是我们添加和删除元素,所以观察状态不必是单调的

如果我们将这些系统链接在一起,并根据元素的存在性或不存在性采取行动,它看起来就不再单调了。最终的状态最终仍将收敛,但在稳定之前,我们可能会或可能不会在一段时间内看到某些元素。由于中间状态,例如用户读取系统状态并在其收敛之前作出反应,因此不太可能发生某些副作用


CRDT是单调的意味着什么

CRDT表示无冲突的复制数据类型

这意味着(发散的)CRDT实例可能合并在一起(以任何顺序和重复),最终进入正确、一致的状态

单调性可能有助于实现这一点(参见CALM——一致性是逻辑单调性)。但这不是set实例的要求

阅读crdt上的注释:

CRDT集的一些示例如下:

  • G-集(仅增长集,仅添加项)
  • 2P套件(保留墓碑,元素只能插入一次)
  • LWW集合使用时间戳标记添加/删除项目的“时间”,允许多次添加/删除项目。并发添加 使用偏差确定移除
  • 或集合-类似于lww集合,但使用唯一的标记来确定要删除的元素
  • 优化或设置-可以在周围没有很多墓碑的情况下使用,如果您的设置很大(并且有很多墓碑),请查看这些墓碑 变化)
有关更多信息,请访问以下链接:


只需添加一个TL;阿莱基班戈博士给出了令人敬畏的答案:

单调性指的是,一旦复制副本观察并应用操作,对象的状态将始终考虑该操作

一旦应用了操作,它将永远不会被取消应用


观察到的(大多数)CRDT集的非单调性并不使CRDT单调性失效

支持删除操作的CRDT集的核心是两个G集:

  • 其中一个G集是添加的元素集
  • 另一个G集是被移除的元素集

观察到的状态是添加的元素集减去删除的元素集。尽管每个内部集合都是明显单调的,但它们的差异似乎是非单调的。

什么是CRDT?有合适的标签吗?