讨论 云笔记 如何用同步实现一致性
前言:
接触有道云笔记也有一段时间了,电脑和小米上都装了一个客户端。
电脑上做了修改,在小米上点同步按钮就可以保持一致性。
但是在小米上做了修改,在电脑上同步半天都没出来。
曾经还向网易反应过,为啥手机修改了不能同步。
没解决,可能是优先级的原因吧。当中还碰到一件有意思的事情。
当前手机和电脑的内容都是A。我在手机端修改了内容,手机端变成B并保存。
因为手机端的编辑功能比电脑端的要烂很多,所以我需要在电脑那端在B的基础上修改。
但是打开电脑,发现怎么同步都是A。无奈只能重新在电脑上将A变成B又变成C。
然后在手机端同步的时候,也变成了C。B就给丢失了。真不知道网易那边技术是怎么实现的。
早先在 德问 上好像看到过有人提了 这个问题 如何用
同步 实现一致性,但是今天在去找愣是没找到,遗憾啊。
还有一个产品,百会的格格,很强大。多人同时在线看一张 excel表,任何用户做的修改,很短的时间内其他用户都马上能更新到。强据说是国外做的。
多终端 个人感觉没啥了不起的,都连到数据库就行了。
分布式存储,个人了解的不多,先不讨论。
我比较感兴趣的是 如何用同步实现一致性的
正文:
全量同步:
全量同步实现要简单很多,恶心的地方是 同步代价太大。特别是内容很多时
同步触发条件:
- 用户点击同步按钮,不管三七二十一 就同步
- 用户有编辑 就 认为是做了修改 自动触发 同步,如果编辑了但是内容没有修改,那就白白同步了
增量同步:
文本的变化包括:增,删,改三种。
增量同步需要 识别三种动作以做出不同的操作。
- 增,将增加的内容 以及增加的位置信息 同步上去
- 删,将删除的内容 以及删词的位置区间信息 同步上去
- 改,就是 先删后增
每次同步 就是 同步这些操作记录。
就像github的commit一样
那么如何精确 识别三种动作。
本地的文本信息 有两份,一份是版本同步用,一份是编辑用。
同步的时候将 编辑版与同步版 进行比较。以行或其他的度量 为比较单位,可以引入hash。
这样就可以 得到增删的记录。然后将记录同步到服务器,用编辑版覆盖同步版。
实现好像较简单,缺点是如果用户在中间进行插入,即数据发生偏移,此时就会产生很多操作数据,其代价近似全量同步。
该如何克服这种中间插入,产生的性能影响。
如果服务器端数据的存储也是以上述度量为单位,那么是不是可以 结合链表的思想。
暂时就这么多,大家有想法可以一起讨论。
有研究过这个问题的,希望能讲讲您的实现方法。