上传相同文件的不同用户需不需要重新上传一遍文件?

大多数好点的网盘为了节约存储空间,确保文件唯一性,上传文件时都会判断哈希码,哈希码一样的文件就不上传了,数据库里做一个记录就可以,这就是是大家所说的秒传。一般会对整个网盘的文件进行判断,和上传的具体用户是谁无关。(再深入点理解就是网盘大多数都是对象存储,不同于文件存储,文件并没有真实的物理路径和树状结构,文件归属关系只是数据库的记录)

但就是秒传的产品也是有一些列外,因为计算哈希码需要时间,网速很快的情况下,很小的文件计算哈希码的时间甚至比上传的时间还要长,这显然得不偿失还会让用户等更久,所以有的网盘会设定超过一定大小的文件才开启秒传。(一般10M以上)

还有就是如果文件特别大,计算哈希码的时间会很长,这个时候的策略一般是边上传边计算哈希,如果计算完成发现云端有这个文件,就终止上传(看上去就是上传了一会突然飞速完成了)。这样很大的文件,刚上传的时候也会让人误以为没有秒传,因为看上去上传在跑还有速度。

微信传文件并不去判断哈希,也没有用到秒传技术,因为按微信的理念,没有必要这样做。首先微信传输的文件一般不会很大(一般不超过20MB),计算哈希并不划算。其次,微信服务器端并不长期存储用户上传的文件,传输好的用户文件是存储到本地的,查看也是在本地。服务器仅保存用户的文件几天(现在好像是5天),超过时间后文件就从服务器删除也无法下载了。这个机制更像是个缓存机制,逻辑简单,容易维护。这和网盘用户需要随时在云端查看下载数据的需求是完全不一样的。

所以,主要问题还是必要性问题,在微信等支持互传文件的产品定位和大多数用户的使用需求上,没必要做秒传。

 

发表评论

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