crdt - 如何在 delta-crdt 中管理和保持 delta-state 的大小最小
问题描述
我对(delta)crdt很陌生。据我了解,delta crdt 保持“全局”(最终一致)状态和 delta 状态。它偶尔会将增量部分(有时是完整状态)发送到其他副本。当所有副本都看到更改时,其他一些 crdt 算法可以垃圾收集墓碑。我的问题是,是否有可能(并且是否有意义)合并这两件事?
- 保持增量是本地增量和从其他副本接收到的增量的联合
- 将合并的增量发送到一些副本
- 在接收 delta 时,它也会合并到 global 和 delta 状态。如果所有副本都看到了操作,则清除墓碑。
一些文章:
我的理论是,副本将发送较小的增量而不是整个状态,因此带宽要求是有限的,并且墓碑的大小(以及内存要求)也将受到限制。有没有关于 delta-crdt 和 tombstone 垃圾收集的好教程?我读过一些原始文章,它们并不那么容易理解。
我也找不到太多关于如何将增量发送到副本的细节。(将所有 delta 发送到所有副本似乎有点矫枉过正,而且不是太理想)。我的基本想法是保留副本之间连接的拓扑(crdt)图。在增量传播期间,此图用于构建一些“最佳”拓扑,其中每个副本发送到(最多 2 个)其他副本。如果图拓扑显示某些副本处于非活动状态,则其他副本会尝试找到到非活动副本的“新路线”。它可以将副本标记为已断开连接。当一个副本出现时,它可以从某个其他副本获得完整状态,并使其成为这个“有机”最终一致拓扑图的一部分。
所以我很新,欢迎提供任何介绍性信息。
谢谢,gzp
解决方案
推荐阅读
- azure - 递归逻辑应用获取 azure 警报搜索结果 url
- timer - SwiftUI 中的计时器在模拟器的后台工作,但不能在真机上工作
- spring-boot - 无法使用弹簧启动对 r2dbc 运行测试
- file-upload - Concrete5.6.4.0 CMS 定制多文件上传表单
- apache - git、Apache/httpd 和 LDAP - git 客户端无法访问(错误 500)
- node.js - 从异步 Azure API python 返回列表
- c++ - “int*”类型的参数与 C++ 中“int**”类型的参数不兼容错误
- javascript - 如何更改投票结果栏的颜色?
- android - 我有一个关于从数据库获取数据的问题,同时我试图获取用户的姓名和电话号码
- sql - 创建字符串查询 concat