背景:
在填写表单申请时,用户突然提出要求:是否在填写详情时可以支持截图保存到数据库里。
调研:
1. 当前数据库保存「详情」字段是字符串,如果突然变更字段类型,对现有数据会有影响;
2. 数据库是否能很友好地支持存储图片?以前没怎么听说过数据库用来直接存储图片,如果要存的话,也是存图片的一个路径(/相对路径)。直接上网搜了一些资料,这篇博文写得挺好: 关于图片或者文件在数据库的存储方式归纳。 提炼几点如下:
1)当前互联网环境中商品图片、用户上传的头像等图片要存放在数据中,有2种方式:
a. 图片以二进制形式存储到数据库中(mysql中blob类型,容量64K或MEDIUMBLOB类型,容量16M,LONGBLOB类型,容量4G)。
优点:备份图片数据和迁移数据方便。
缺点:
# mysql对通信数据大小有限制,一般高清一点的图片大小都有上M,而mysql默认数据通信大小是1M,my.conf的max_allowed_packet字段;如果图片大的话,直接影响与mysql交互时间;
# 影响数据库性能。当数据库数据量大时时,大部分时间耗费在php,java等接口等待数据返回的数据;大字段数据加重数据库负担,在高并发情况下严重影响性能;
b. 图片存储在磁盘上,数据库字段中保存的图片的路径。
2)数据库性能调优,这个后续结合实际多深入研究一下。提到几点:大字段重新拆分到单独一个表中,因为数据库查找数据是扫描数据文件,文件容量越小,速度也就越快。所以,单表容量在几G时得考虑分表了。『分离 瘦身』
3)存储图片路径为何一般都是相对路径,且前面还不加「/」。为以后扩展方便,直接域名加图片相对路径即可。
4)何为cdn(内容分发)服务。本质为了解决距离远而造成的通信速度慢问题,使用就近服务。比如北京用户访问在广州的某通信服务,必然会有南北链路远而带来的通信时延大的问题,如果这时使用cdn服务,即广州的该通信服务在北京部署了服务器(或机房或安放节点),那北京用户就会直接请求距离近的服务完成交互。