前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何设计一个高可用、高扩展的图片存储功能

如何设计一个高可用、高扩展的图片存储功能

原创
作者头像
Mandy的名字被占用了
修改2021-06-28 10:29:55
8910
修改2021-06-28 10:29:55
举报

文章简介

本文通过对一个小型电商系统的图片存储模块分析与总结,分享如何设计一个适用的图片存储功能。

常见图片存储方式

在日常的系统设计中,难免会涉及到图片功能,例如商品的图片、文章封面图、用户头像等等。一般常规的方式对数据创建一个图片的字段,这个字段存储的就是文件的路径。如下面的格式:

数据编号

其他的字段

图片字段

1

...

2

...

上述的数据表设计有好也有坏的地方:

优势:

  1. 存储方式简单,只需要用户上传图片,获取到图片的url存储起来即可。
  2. 展示方式简单,客户端只需要根据字段的值,显示即可。

劣势:

  1. 扩展性弱,如果后期我们的图片更换了域名,需要针对所有的数据中的域名部分进行替换。
  2. 多图片扩展性弱,如果我们的某一条数据有多张图片,这时候存储的值可能是这种格式。图片路径1,图片路径2,....,图片路径n。虽然存储起来简单,但是在展示阶段需要做数据格式的转换,需要将字符串转换为数组的格式进行循环处理。
  3. 浪费存储资源,假设有一张图片a,在用户头像的时候上传了一次,在商品图片的时候也上传了一次,这样同一张图片就会存储两次,多了一倍的存储空间。
  4. 第2点提到了路径问题,可能你会想我图片里面不存储具体得域名信息,只存储图片的名称,在客户端展示的时候进行拼接即可。$domain = 'https://www.baidu.com/'; $imageArray = ['1.png', '2.png', '3.png', '4.png']; foreach ($imageArray as $value) { $domain .= $value; }上面这种方式可以规避域名问题,但是也难免避免存储方式问题。有可能系统前期使用的是七牛云存储,后面适用了阿里云存储,腾讯云存储,这种就需要处理存储方式。虽然也可以解决,但是让系统设计起来显得更加的复杂。

优化思路

根据上面的问题,我们可以思考一下,如果将系统的所有图片,都做成一个功能模块,没一个需要涉及到图片的地方,去调用这个模块中的列表数据,获取到系统的图片,这样是不是会更好一些呢?

Snipaste_2021-06-26_19-37-06
Snipaste_2021-06-26_19-37-06

如上图,微信公众号的图片管理功能。左侧是图片的分类,右侧是对应的具体图片。我们在需要适用图片的地方,去获取对应的图片数据即可。

Snipaste_2021-06-26_19-38-47
Snipaste_2021-06-26_19-38-47

同时,我们也有一个独立的素材库管理,可以查看系统的所有图片,便于对图片的管理。

方案设计

优化思路提到了,我们单独做一个图片管理器。那我们数据表该具体怎么设计呢?我们这里以微信公众号的图片管理做演示。

  1. 首先我们有一个图片的分类,这时候就需要一个图片分类表(image_category)。
  2. 接下来,我们就需要创建一张具体得图片表(image),用来存储具体的图片数据。
Snipaste_2021-06-26_19-43-51
Snipaste_2021-06-26_19-43-51
  1. 图片分类主要就是分类的名称、排序、创建时间等等信息。
Snipaste_2021-06-26_19-44-01
Snipaste_2021-06-26_19-44-01
  1. 图片信息表存储的字段就相对比较多一些。有图片分类的id、存储域名、图片的名称、图片的url、图片的大小、图片的类型等信息。
  2. 表中拿一个字段存储域名,客户端在获取到域名和图片的名称时,直接拼接起来就是一个图片的完成路径。
  3. 图片的大小和图片的扩展名,方便后期我们在页面上进行展示。有的系统可能会展示图片的大小。

方案总结

通过上面的设计,我们可以总结出如下几点优势:

  1. 优化了图片的存储空间,避免同一张图片多次上传,占用系统的存储空间。
  2. 如果涉及到不同的存储平台,我们图片中有域名字段,直接将域名和图片名称进行拼接即可。后期不管是换了多少个存储平台,系统也不会有任何影响。
  3. 便于系统对图片的管理,这样将图片存储独立出来,方便查看系统的所有图片数据。
  4. 涉及到业务数据的表,只需要去关联图片表中的id即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章简介
  • 常见图片存储方式
  • 优化思路
  • 方案设计
  • 方案总结
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com