业务功能
- 文件上传
- 文件下载
- 文件列表查询
- 文件删除
- 文件关联
文件作为无业务的数据对象存储后有一个唯一的文件fileId,通过文件fileId能找到文件的数据;
业务角度并不关心fileId,业务只关心业务busiSeqNo,因此需要建立busiSeqNo和fileId的映射;
影像文件在生产业务中强关联用户信息或者其它一级业务信息,因此有必要把热点busiSeqNo和 fileId关联,比如用户uuid和fileId的关联,这样就可以通过uuid拿到用户的所有影像资料
fileId、busiSeqNo、uuid是影像文件的核心领域属性字段;
技术架构
一、文件信息
- fileId
- 文件存储路径
- 文件存储大小
- 文件业务分类类型
- 文件格式
- 文件是否加密
- 文件加密算法
- 文件其余存储引擎相关信息
- 创建时间
- 更新时间
- 文件主权系统
二、文件和业务信息的映射关系
文件fileId和busiSeqNo的映射关系存储;busiSeqNo和文件fileId呈正相关,虽然映射关系数据结构简单,但是存储量非常大;因此需要选一个大存储的组件;
- MySQL可以用sharding做分库分表
- 一致性hash环实现
- 分片累加:第一个分片慢了再存第二个分片,以此类推
- 分片键的选择及分片数设定
- 考虑是否迁移数据
- 考虑数据增长速度
- 考虑扩容?
- 缩容没考虑
- ES存储提升查询性能,可以存超大数量的信息
- HBbase这种K-V存储也适合,可以存超大数量的信息
- 其它
三、文件的存储引擎选择
- 常规的FTP服务
- 分布式文件存储系统 FastDFS
- 云SAS存储
- 对象存储系统
- ...............
根据系统业务容量,业务增长情况,成本预算、技术支持能力、项目时间KPI等综合考虑选择不同的存储引擎
四、数据权限管理
- 系统常规鉴权,鉴权通过后就可以直接查看文件,这种权限粒度比较粗
- 文件权限有效期保护,权限是有有效期的
- 业务维度做权限矩阵表
- 后台管理人员对数据权限的管理
- 删除权限界定,谁可以删除?
- 查看权限界定,谁可以查看
五、安全
- 文件加密存储
- 文件压缩存储
- 文件下载、上传的安全校验
- 比如暴力脱库下载如何防护
- 暴力上传打死IO如何防护
- 防止攻击
- 限流
- 熔断
- 身份识别?
- 只能内网调用?
- 防止数据丢失
- 数据备份
六、数据质量治理
- 数据的准确性:是否可以定时订正修复
- 数据的有效性:是否可以定时过滤掉无效数据
- 重复文件清除
- 类似文件筛选掉
- 数据归档
七、成本及性能问题
- 数据的存储空间成本考核
- 动态调整存储压缩算法,比如把非热点数据压缩,热点数据不压缩;
- 根据网络情况做分布式缓存,提高访问能力
- 数据的优先级存储
- 优先级高的存储高性能存储
- 优先级低的存储普通存储
- 怎么保证文件上传功能是数据一致性
- 批量上传和下载性能如何保障
- 大文件存储怎么解决?
|