【学习笔记】OT算法

869 阅读1分钟

1. 为什么需要

  • 场景:多用户同时读取没有问题,多用户同时写入就会有冲突。OT算法就是用来解决冲突的。

  • 抽象:多用户写入抽象为两用户 A 和 B,同时写入到服务器

  • 对比

    1. 悲观锁(锁在读取,只能一个用户编辑)
    2. 乐观锁(同时编辑得出,A' 或 B',只能二选一)

2. 工作流程

2.1 insert/delete
  1. 操作 github ot.js document,发现,每次 A 或 B,总会产生两种 insert 或 delete。
  2. insert 格式 Insert(pos=11, content='a')
  3. delete 格式 Delete(pos=3, length=1)
2.2 retain
  • 出现 A --> retain ——> B (retain 不是每次都会需要)

    比如 A Insert(pos=11, content='a') B Insert(pos=11, content='b'),Server 会把 B 改为 Insert(pos=12, content='a')

  • 何时出现 retain

    1. A Insert(pos) 后, B的 InsertDeletepos >= A 的 pos; retain(pos+1); (猜想原因是 insert 操作在光标左边)
    2. A delete(pos) 后, B的 InsertDeletepos > A 的 pos; retain(pos-1); (猜想原因是 delete 操作在光标右边)
2.3 用户A与B

这里的 A 与 B,实际上是先提交到 Server 的叫 A,后提交到 Server 的叫 B

参考资料

以上是由以下学习资料理解、整理,得到