3mysql
数据库分表
水平分表:假设分成256张文件表,按文件Sha1值后两位来切分,则以:tb_${FILE_SHA1}[:-2]的规则到对应表进行存取。
// OnFileUploadFinished : 文件上传完成,保存meta (插入)
// GetFileMeta : 从mysql获取文件元信息(查询)
// UpdateFileLocation : 更新文件的存储地址(如文件被转移了) (更新)
涉及源码:db(file.go mysql(conn.go))
使用MySQL小结:
通过sql.DB来管理数据连接对象
通过sql.Open来创建协程安全的sql.DB
优先使用Prepared Statement
4-1用户系统用户表设计(注册和登录)
由于原有情况下,唯一索引用在了字段phone上. 而当前插入表的sql语句中, user_name才是应该要保持唯一的, 因此相对于视频所演示的建表语句进行了更新, 具体如下:
1 | CREATE TABLE `tbl_user` ( |
登录
// 1. 校验用户名及密码
// 2. 生成访问凭证(token)
// 3. 登录成功后重定向到首页
涉及源码:
db(user.go )
handle(user.go)
访问鉴权(验证token的拦截器)
handler(auth.go)
5.hash算法对比以及秒传原理
6.Redis
分块上传与断点续传
分块上传:文件切成多块,独立上传,上传完成后合并(初始化上传->上传分块(并行)->通知上传完成)
断点续传:传输暂停或一场终端后,可基于原来进度重传
小文件不建议分块上传
可以并行上传分块,并且可以无序传输
分块上传能极大提高传输效率
减少传输失败后重试的流量和时间
初始化分块信息
上传分块
通知分块上传完成
取消上传分块
查看分块上传的整体状态
涉及源码:
cache(redis(conn.go))
handler(mpupload.go)
7.Ceph
Ceph:redhat开源出来的分布式存储系统
8.阿里云对象存储OSS
8-3 OSS术语
8-4 OSS网页具体操作
9.RabbitMQ
RabbitMQ:一种开源的消息代理
10.微服务
基于gin改造用户service
go-micro
源码说明:
- master分支: 通过原生net/http实现各接口功能
- gin分支: 通过Gin框架来改造(微服务化章节之后主要基于Gin框架来进行演示)
- pkg分支: 通过go-bindata等工具实现静态资源打包的一个示例
- 第九章(RabbitMQ异步存储)章节的代码,可以下载标签为
v0.3
的版本 - 第八章(OSS)及之前章节的代码,可以下载标签为
v0.2
的版本