zoukankan      html  css  js  c++  java
  • 讨论 云笔记 如何用同步实现一致性

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