支持协作应用中复制寄存器的撤销和重做功能
1. 引言
在协作应用中,数据通常会在不同站点进行复制,并采用支持最终一致性的乐观并发控制。具有最终一致性的系统可能会暂时违反某些全局不变量,例如资源的过度预订。对于在线购物和协作编辑等应用,用户在操作过程中可能会进行临时更新并引入错误。撤销(Undo)和重做(Redo)是恢复全局不变量和纠正人为错误的通用工具。
寄存器是一种简单且基础的数据类型,应用程序可以向寄存器写入值并在之后读取该值。最终一致性复制寄存器(EC 寄存器)允许不同站点独立地对其本地寄存器实例进行读写操作,当各站点对本地实例应用了相同的写更新集时,这些实例的值会收敛。
在协作应用中,对于可插入或删除到复合数据集合(如集合或文档)中的不可变数据元素,撤销和重做功能通常已得到较好的理解和支持。然而,对于 EC 寄存器,撤销和重做支持尚未得到很好的研究和实现。
2. 技术问题
EC 寄存器主要有两种类型:
- LWW(Last-Write Wins)寄存器 :这是最常用的 EC 寄存器。每个写更新都与一个时间戳(或一般意义上的优先级)相关联。对于两个并发的更新,时间戳值较大的更新获胜,这种冲突解决方式是有损耗的,失败的并发更新会丢失。
- 多值寄存器 :以应用复杂度为代价实现并发更新之间的无损解决。所有并发更新都会被保留并呈现给应用程序,由应用程序根据多个呈现的值决定一个新值。
当对寄存器的更新是顺序的或可序列化时(如在单用户编辑器或 ACID 数据库中),系统可以将更新历史维护为一个线性的值序列。如果系统知道当前在序
超级会员免费看
订阅专栏 解锁全文
24

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



