使用2P CRDT数据结构(例如2P集)时,如何释放空间?

时间:2018-12-19 17:57:14

标签: data-structures computer-science distributed-computing crdt

2P-set允许从集合中删除元素,但不允许释放那些删除的元素占用的空间。实际上,删除元素会消耗空间,而不是释放空间。 释放2P结构空间的算法是什么?

我试图了解在实践中我可以使用CRDT结构遇到哪些问题。如果没有释放空间的方法,那么2P CRDT结构似乎在现实世界中的任务用途非常有限。

1 个答案:

答案 0 :(得分:1)

虽然我不能为2P-Set发言-因为我仍然没有找到一个实用的用例。但是通常我们只能应用一些技巧:

  1. CRDT使用的元数据的压缩:许多CRDT最初是通过非常简单的设计实现的,后来经过优化以满足行业标准。例如,可以在虚线矢量版本的顶部重新实现OR-Set。在此实现中,您无需将删除的元素保留在内存中:相反,我们可以使用最终可以压缩为矢量时钟的点来跟踪添加/删除的元素。 Here我更详细地描述了这个问题。
  2. 一旦不再需要某些副本,
  3. 运行会很有用。因为我们减少了节点数,或者这些节点不再可用。在这种情况下,我们可以将有效负载与元数据合并,就像它是由另一个副本生成的一样。例如:给定的G-Counter由映射{A:1,B:2,C:1}和一个死节点B表示(无法再增加其状态),我们可以通过合并B'来修剪它形状{A:3,C:1} ,因此减小了尺寸,同时仍保留了正确的值。问题在于,修剪算法必须保证,所有副本都必须独立地收敛到该决策中。