存储(二):OSS2模拟低配百度网盘存储(优化存储)

3 篇文章 0 订阅
2 篇文章 0 订阅

在存储(一)中,已经可以把图片存储到阿里云产品的oss存储服务器上边了。

问题:
如果真是像存储(一)中所实现的功能:用户来一个图片、文件、视频或者其他的待存储对象,我就要给他存储到oss服务上边,这样存储空间的占用速度非常快,在大数据的时代下根本就无法满足需求,如果采用扩容,你无论阔多大,以这样的用户存储速度都不够用,而且存储服务器的高额存储费用可不是开玩笑的。

分析:
如果我们认真观察网上的数据,其实很大一部分数据都是重复的,比如QQ空间微信朋友圈等等,有没有发现好友有时候发的图片可能是之前用过的,即重复的图片,如果这样再存储一下这张重复的图片是不是就是浪费了存储空间?如果这张图片在我的存储服务器上面,我直接给客户返回一个存储连接什么的是不是既可以节省了空间而且还可以达到秒传的速度。
再者,如果你经常抓一些大厂网站、app的包,你还会发现一些规律:比如一个网页里面有两张一样的图片,而抓到的包里面却只有一张图片,这个是不是很不符页面所展示数据。其实不是,这些大厂的后端存储规则早已经达到了一个很成熟的状态,像这种重复的数据,大厂是不会傻傻的给他再存一遍的,而是从已有的数据中给他们返回。
所以综上,一个比较成功的存储案例就是:我存储服务器上面只保存一个数据源,如果用户要上传的数据和服务器上面重复了,我就可以不用给他上传数据而是直接把服务器上面的数据创建一个连接之类的直接返回给用户,而要达到这一目的在用户上传数据的时候就要对用户所上传的数据进行判断,而判断的时候又不能直接拿着数据源进行比较,有没有什么快速比较的方法呢?我们可以模拟现实中我们的省份证和指纹,每个人的省份证和指纹都是唯一的不可能重复,我们也可以给数据做个省份证和指纹,这样不就可以快速验证数据是否重复了吗?
其实百度网盘可能就是基于这个原理上面实现的,当然肯定不仅限于此:用户如果要拷贝数据到自己的网盘,后台会先对这个数据源的内容做加密生成指纹之类的东西(具有唯一性),然后对比指纹表,如果指纹表中存在这个指纹说明存储服务器上面有这个数据了,那就不上传了,而是直接把指纹对应的服务器存储链接返回给用户,如果你上传的数据服务器上面没有,那网盘真的吧数据保存到服务器上了,而网盘这样就收获到了新的数据(赚到了),如果删除的话是不会删除掉已经上传到存储服务器上的数据源,用户删除顶多是删除用户表里面创建的数据源链接罢了。而且这样的设计模式很适合大批量数据管理,有点类似于仓库,如果某天某部宣布了哪些数据不能使用了(小视频不能观看了),只要把指纹表里面的连接路径换成错误的连接或者创建个停用标记就行了,那么网盘下面的用户所有的数据就都不能访问也不能上传了,这个就是能达到一夜之间封杀所有的不良数据源传播,至少在百度网盘上面是看不了数据了。OK思路大概就是这样了,具体过程如下:
在这里插入图片描述
以上就是我个人的理解,如果要看大神的角度可以去看看下面这个连接的具体解释和分析,我觉得十分详细了,而且非常好理解:
https://www.zhihu.com/question/313235122/answer/613469620

实现:
实现部分我是基于存储(一)中oss存储上展开进行的,代码这里就不粘贴了,感兴趣的同学可以去我的github上面查看源码:
https://github.com/A-dying-ape/demo/tree/master/OSS2%E5%AD%98%E5%82%A8_2.0
结束:
以上就是我个人对大佬观点的理解,然后用自己的语言表达出来,如果有什么理解不到位的欢迎各位留言,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值