若是邮箱提供商的话,这样的利用率够高了。但网盘就不一样了。
聪明的工程师发现:不同于邮箱,大家的内容和附件绝大多数都是自创的和不同的。但网盘上大家上传的东西很多都是重复的。
比如:张三今天下载了一部《TxxxO HxT》上传到了自己的网盘上,李四在三天后也下载了一模一样的《TxxxO HxT》上传到了网络硬盘上,随着用户的增多,你会发现总共有1000个人上传了1000份一模一样的文件到你宝贵的服务器空间上,所以工程师想出一个办法,既然是一样的文件,我就只存一份不就好啦,然后在用户的前端显示是没人都有一份不就行啦。当某些用户要删除这个文件的时候,我并不真的删除,只需要在前端显示似乎删除了,但后端一直保留着以供其他拥有此文件的用户下载。直到所有使用此文件的用户都删除了这个文件我再真的将其删除吧。
这样子随着存储的数据越来越多,注册的用户越来越多,其上传的重复数据越来越多。你发现这样的检测重复文件存储的效率越来越大。这样算下来似乎每个人上传的不重复的文件只能平均1M/用户。这下子你可以提供超过50倍的用户使用您这有限的空间了。
但伴随着使用,你又发现一个规律:
张三上传的《TxxxO HxT N0124》和李四上传的《TH n124》是同一个文件,只不过文件名不一样,难道我就不能识别出他们是一个文件,然后只将其分别给不同的用户保存成不同的文件名不就行啦?确实可行,但这要利用一些识别文件相同性的算法,例如MD5值等。只要两个文件的MD5值一样,文件大小一样,我就认为它们是相同的文件,只需要保存一份文件并给不同的用户记作不同的文件名就好了。
有一天你发现,因为每一个文件都需要计算MD5值,导致CPU负荷很大,而且本来一样的文件非要浪费带宽上传回来才可以检测一致性,能改进一下吗?
聪明的工程师写了个小软件或小插件,美其名曰“上传控件”,将计算MD5的工作利用这个软件交给了上传用户的电脑来完成,一旦计算出用户要上传的数据和服务器上已经存储的某个数据是一样的,就干脆不用上传了,直接在用户那里标记上这个文件已经按照XX文件名上传成功了。这个过程几乎是瞬间搞定了,并给其起了个高富帅的名字“秒传”!
通过以上这么多步骤,你发现本来你只能给1000用户提供网络空间的,这么多改进办法后,在用户端显示1G空间不变的情况下,近乎可以为1000000个用户提供网络空间了。
这样若是您哪天心情好,对外宣传说:我要将每个用户的存储空间上限提升到1TB。那么每个用户平均还是只上传50M数据,只有极个别的用户上传了突破1G原始空间的数据,你会发现所付出的成本近乎是微乎其微的。
辛勤的攻城狮还在为如何更有效率的利用服务器提供的磁盘空间在不屑努力和挖掘着……
- 我的微信
- 这是我的微信扫一扫
-
- 我的微信公众号
- 我的微信公众号扫一扫
-
评论