复制寄存器撤销重做支持与同步加速器本体协同设计
复制寄存器撤销重做支持
更新历史处理
当有寄存器更新时,会将更新对象添加到历史记录中。接着从后往前扫描历史记录,找到寄存器的头部更新。利用更新对象中的元数据重新排列链接并设置新的头部更新。然后从新的头部更新开始,沿着链接查找,直到找到有效的更新。根据这个有效更新生成一个补丁,并将其发送到前端。
在遍历链接时,如果遇到无效更新,会跳过该更新的所有对象。例如,在特定示例中,当访问到 w−1A3 时,会跳过 w3 而访问有效的 w−2A2 ,然后生成一个将寄存器写入值为 2.0 的补丁。需要注意的是,由于 w−1A2 和 w−1B2 具有相同的有效性,它们在顺序列表中的顺序并不影响结果,因此站点 A 和 B 的最终历史记录实际上是等效的。
更新历史维护着两种不同的顺序:
- 历史记录中的物理顺序,使得不同站点在连接时能够相互同步。
- 同一寄存器的更新对象链表,让站点可以独立确定寄存器的当前值。
相关工作与新方法
支持并发更新的撤销和重做在协同编辑和通用协同应用的 CRDTs 领域一直是活跃的研究课题。目前,对于最终一致的复制寄存器的并发更新,还没有通用的撤销和重做支持。
之前提出了一种为 CRDTs 提供通用撤销和重做支持的方法。更新由(基于状态的)CRDT 的不可约连接状态表示,其中状态形成一个连接半格。但为复制寄存器定义合适的不可约连接状态并非易事。例如,LWW 寄存器使用时间戳
超级会员免费看
订阅专栏 解锁全文
2万+

被折叠的 条评论
为什么被折叠?



