网盘怎么做到秒存的?

每个文件都有一个独一无二的哈希码(MD5)。

只要不更改文件内容,无论是更名、复制、移动都不会改变哈希码。文件内容变了哈希码就变了。

所以哈希码能确保一个文件的内容独一无二性。

扫描文件哈希码是可以被计算出来的。

靠谱的网盘,无论是否要秒传,上传下载都要做哈希验证,因为要防止有人在文件传输过程中窃取文件的分包并替换篡改文件。所以要计算文件哈希码,以确保上传前和上传到服务器后的文件是同一个文件。

如果计算得到的哈希码经过比对查询发现云端文件数据库里有一个一模一样的哈希码,就意味着没必要再上传这个文件了(云端已经有了),内就可以终止上传直接显示已上传。通常不太大的文件(10G以下)计算哈希码的时间就是个几秒,所以看上去的效果就是几秒文件就上传完成了(其实文件没有上传,因为没必要上传了就被中止了),所以叫秒传。

这里还要解释下现代网盘的文件系统,大多数靠谱的网盘其实物理上都不是树状文件结构存储数据的(一般使用对象存储)。所以文件结构并不是我们在电脑或nas上看到的这种以文件树的方式一层层存储的。而是把文件分成小块存放在不同硬盘里。文件间没有层级,也没有文件夹。我们界面上看到的文件夹和文件层级是写在数据库里的。每个用户都有自己的文件结构(文件树),数据库里记录了每个账号的文件树和对应文件在存储系统中的位置。用户访问时,根据数据库里用户的文件结构组装出该用户访问的文件树。这样有很多好处,首先管理性更强、更高效、查询更快(数据库查询)更安全(就是拿到硬盘也拿不到完整数据),其次可以针对不同用户权限给不同用户不同的文件结构,同一个文件也可以不同的方式维度展现而不用复制。最后还有个不错的副产品,就是每个相同的文件只需要保存一份,节约存储空间。这个副产品体现在上传上,就是我们常说的秒传

发表评论

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