OT算法-关于版本冲突相差过大的解决方案

(operational-transformations)
此篇文章写给一同在进行ot算法实践中的朋友们,希望抛砖引玉,有对ot算法感兴趣的小伙伴可以联系我一下,目前关于此算法的一些细节处理上我还有一点点的疑惑部分,希望能讨论解决

Purpose 目的

如果A客户端对文档进行了多次编辑,B客户端因为网络原因没有及时同步到A客户端的OP操作,继续在老版本编辑并向服务端发送OP操作会出现什么情况呢?

如何解决

OT算法通过链式反应法则解决对老版本OP操作的问题
前边说过:transform算法的解决方案,这次也借助这个核心算法解决

基础操作分为三种:

R = Retain,保持操作
I = Insert,插入操作
D = Delete,删除操作

公式

Vm: m版本文件内容
OPm: 服务器记录的对m版本的操作
BOPm: B客户端对Vm的修改
DOOP: 服务器OT变换后执行操作
REOP:B客户端OT变换后执行操作
可得:
Vm * OPm * OT(OPm, BOPm) = Vm * BOPm * OT(BOPm, OPm)
DOOP = OT(OPm, BOPm)
REOP = OT(BOPm, OPm)
{ Vm * OPm * DOOP * OT(DOOP, OPm+1) = Vm * OPm * OPm+1 * OT(OPm+1, DOOP) = Vm * BOPm * REOP * OT(DOOP, OPm+1) }
DOOP = OT(OPm+1, DOOP)
REOP = REOP * OT(DOOP, OPm+1)

遗留问题

OT算法有大量字符串拼接的操作,对较大的文档协同编辑存在一定的性能问题
这么操作一定性能会变得有些差,目前我没办法解决