请教一个关于分块存储文件同步的问题

根据 rsync 算法,客户端将文件分块,计算两种 hash 值,然后发送给服务端,然后服务端会返回一个列表,表示新的文件的分块情况,有可能是直接引用原文件的某一块,也有可能是新的数据。

那么如果是引用原文件的某一块,原文件在分块的时候要把每一块内容先缓存起来比较好,还是等到需要用到的时候再从某某字节开始读取一块比较好?

相关文章

3 thoughts on “请教一个关于分块存储文件同步的问题

  1. 这里就是缓存的方案了,缓存肯定是要缓存的,现在主流两种缓存策略:
    1. 软件本身不管理缓存,缓存由操作系统的文件系统管理,典型案例是 Elasticsearch,优点是减少了很多工作量,缺点也很明显,自己不管理缓存,热点数据的缓存容易被冷数据的缓存覆盖
    2. 软件管理缓存,典型案例是 mysql 的 innodb 引擎,所有缓存加载在软件的堆内存内,优点是缓存管理由自己处理,通过各种策略防止热点数据缓存被冷数据缓存覆盖,缺点是有很多额外工作量,还需要预防 OOM

  2. 另一个问题就是版本控制的细节了,可以去了解一下 git 的实现,简单来说就是提交时间+版本号,版本新旧比较很简单了,真正麻烦的是版本冲突后的处理。

  3. @wakzz 想请教一个问题,如果保证服务端的文件是最新的,那客户端想把这个最新的文件拉下来,要怎么判断应该是完全覆盖的更新,还是要解决冲突呢?这点一直想不太明白

  4. @wakzz 我目前的简单理解是,如果本地的文件修改时间**早于**服务端的文件修改时间,那文件直接拉下来然后覆盖,如果**晚于**服务端,说明本地的文件在更新到最新版本之前就进行了修改,所以这时候再拉下来就会冲突,就需要解决冲突了。不知道这种理解对不对

发表评论

电子邮件地址不会被公开。 必填项已用*标注