1. 为什么需要
-
场景:多用户同时读取没有问题,多用户同时写入就会有冲突。OT算法就是用来解决冲突的。
-
抽象:多用户写入抽象为两用户 A 和 B,同时写入到服务器
-
对比
- 悲观锁(锁在读取,只能一个用户编辑)
- 乐观锁(同时编辑得出,A' 或 B',只能二选一)
2. 工作流程
2.1 insert/delete
- 操作 github ot.js document,发现,每次 A 或 B,总会产生两种 insert 或 delete。
- insert 格式
Insert(pos=11, content='a') - delete 格式
Delete(pos=3, length=1)
2.2 retain
-
出现 A --> retain ——> B (retain 不是每次都会需要)
比如 A
Insert(pos=11, content='a')BInsert(pos=11, content='b'),Server 会把 B 改为Insert(pos=12, content='a'); -
何时出现 retain
- A
Insert(pos)后, B的Insert或Delete的pos>= A 的pos; retain(pos+1); (猜想原因是 insert 操作在光标左边) - A
delete(pos)后, B的Insert或Delete的pos> A 的pos; retain(pos-1); (猜想原因是 delete 操作在光标右边)
- A
2.3 用户A与B
这里的 A 与 B,实际上是先提交到 Server 的叫 A,后提交到 Server 的叫 B
参考资料
以上是由以下学习资料理解、整理,得到