发布网友
共4个回答
热心网友
一.分而治之
计算机最重要的基本算法思路就是分而治之,在我们眼里,一个文件不是一个文件,而 是一堆存储块,每个存储块可能20Byte大小,至于这个值具体多大,你可以自己设定,这里的20Byte仅提供参考。通过这样的方法,一个文件被分成了 很多个块,我们只需要比对块是否相同就可以得出哪个部分做了相应修改。
二.快速校验
刚上面提到如何比对文件,当然这里肯定不会把文件的每个块上传去比对,那样做就没 有意义了。快速比对这不禁让我想起了哈希规则,哈希表可以通过O(1)的复杂度查找某个key,为什么? 因为它通过计算hash值来初步验证key,一个key的hash值是唯一的。但是仅仅验证hash值是不可靠的,因为hash值有可能会冲突,所以在 验证完hash值后,我们在进行key的比较来确定要找的值...
通过哈希的思路,我们可以使用类似的方法来实现文件增量同步,把每一个存储块,通过MD5计算其值,然后传递MD5值到服务器,让服务器比对MD5来确定有没有被修改,如若MD5值不相等,则判定这个文件块有被修改过
为什么是MD5?
1)能够将任意长度的字符串转换为128位定长字符串(MD5 16)
2)MD5能够保证绝大部分情况下不同的值hash之后其hash值不一样,哈希冲突比较少
这样就可以了吗?
No,MD5的生成需要占用比较长的CPU时间,所以我们需要寻找一种更简洁的校验方式,这里选用Alder32 是一个比较通用的解决方案
Alder32有两个优点:
1、计算非常快,比MD5快多了,成本小;
2、当我们有了从0-k长度的校验和后,计算出1-k或者2-k等其他校验和非常方便,只要少量运算即可。(k可以理解为上面的20Byte)
当然,它的缺点也很明显,就是碰撞率比MD5高多了,所以,我们客户端需要同时计算出Alder32校验和与MD5值,传给服务器,而服务器,为了节省CPU时间,第一步只生成Alder32进行校验,当值相等时,在进行MD5校验,这样服务器就节省了很大的开支。
Alder32算法实现:
三.实现更改
因为已经找出来了文件不同的地方,所以只需要按需上传更改的部分到服务器,然后服务器做更改就可以了。
热心网友
文件增量同步你可以选择:
一、Dropbox
Dropbox作为同步盘的先行者,是第一家实现的增量同步功能的网盘。用户在使用修改保存使用Dropbox同步的文件时,Dropbox不会上传整个被修改过的文件而是仅仅上传被修改的部分。Dropbox虽然可以称得上是体验非常棒的网盘,但是在国内无法正常使用,同步速度也得不到保障,所以对国内用户来说并不实用。
二、坚果云
坚果云是一款非常安全且易用的企业网盘,可以帮助您和您的企业实现文件备份、文件同步、文件共享、企业文件管理、大文件传输、*跨地域传输、团队协同办公、移动办公等需求。当您在修改任意文件时,坚果云会通过智能分析,找出当前的文件和上一个版本之间修改的部分,在同步时只上传两个版本的差异部分,从而大大加快文件的同步速度、降低流量的消耗。
热心网友
文件增量同步的原理有答案已经说的很清楚了,现在大部分云盘都是通过对比MD5值来实现的。云盒子企业云盘目前是可以实现秒传功能。也就是当你上传一份云盘已经存在的文件,不管这个文件多大,秒速完成上传。至于增量同步功能还在规划中。
热心网友
我也跟你一样的情况。我现在是,买了个500G的移动硬盘,把必须同步的文件或文件夹保存在移动硬盘上,上班就接上班的电脑,下班就接家里的电脑,所有编辑修改删除,都直接在移动硬盘上操作。