存储(三)OSS2存储,解决mysql索引指纹匹配慢的问题

背景: 在存储二中我模拟实现了低配的百度网盘,在指纹存储匹配实现的过程中根本就没有考虑到后期运行速度的问题(因为自己小白还没有什么实质性的经验),最近在使用的过程中发现运行的速度越来越慢,如果是这样的话,那么之后公司的后端存储用户量一旦大起来,存储频率高起来,那之前的努力就没有什么用处了。
在正文开始之前先简单阐述下存储二中的实现逻辑:

  • 1、利用爬虫爬取某网站的图片url,模拟用户使用APP上传图片。
  • 2、再获取图片内容,然后做md5和sha1加密。
  • 3、把加密后的密文叫做指纹,指纹是唯一存在的,拿着指纹去数据库对比,如果存在,则图片在OSS2存储服务器已经存在,返回图片的存储路径给用户更新用户表;如果不存在,则图片还没有存储过,保存指纹到指纹表,然后把图片上传到OSS2服务器,反回存储路径更新用户表。
    ps:获取图片内容用时在0.1秒左右,上传图片的时间在0.1秒左右,看网速,往数据表插入数据的时间就更加短了,但是在指纹表数据量在120w的时候查询的速度却达到5秒,所有的查询语句都是最简单的查询语句,可以说或查询语句是最优的,那这个是非常消耗时间的(忘记截图之前的查询时间了)。

问题: 从上面可以看出存储这块没什么问题了,但是120w的数据量对应用时就要在5秒左右了,后期要存一张图片的耗时是非常不乐观的。占用时间最大而且还在增长的是查询指纹,所以要优化下查询。

解决办法:
一、布隆过滤器:
百科的解释是:它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。从百科给的解释非常适用于我们目前遇到的困境,但是它是在程序上面实现的,目前程序已经完成,改起来比较耗时,而且我也没有布隆过滤器的实战经验和一定程度的了解先不采用了。感兴趣的同学可以去看看这篇文章:https://segmentfault.com/a/1190000017183534
二、数据库索引:
如果数据库的索引用的好,这个问题可以决绝,但是会影响插入速度,可是我120万的数据量丝毫没有感觉到插入慢,我觉得这篇文章(https://zhuanlan.zhihu.com/p/23624390)对索引解释的非常到位我这里就不多介绍了,然后索引的使用的话这篇文章(https://blog.csdn.net/qq_33642117/article/details/76349215)也比较全面,可以去看看。
三、大数据引擎
hadoop家族,hbase/hive。但是有很高的运维成本,一般公司是玩不起的,这个领域我还不能游刃有余,加上公司开发的APP受众定位在了30万左右应该用不到,而且经费困难还是算了吧。

综上三种方法的对比,考虑再三选择了第二种在自己认知以内而且简单粗暴,立竿见影:
在这里插入图片描述

在这里插入图片描述
基本上就没有消耗多少时间就可以匹配到指纹,对比之前的5秒可以说节省了非常大的运行时间和数据库性能,如果后期有什么其他的问题再修改其他方案吧,但是每种方案的有自己的优点和缺点还是看领导的意思。

你可能感兴趣的:(python,oss存储,mysql,mysql,python)