前置要求
- MongoDb需要使用Shard方式部署
- 需要安装好 mongod、mongos、replica set
使用GridFs存储文件
GridFs存储文件的方式
GridFs使用两个集合存储文件:files、chunks。如果不做指定,默认会使用前缀【fs.】
files
其中files是文件元数据,存储的是文件的一些信息。不建议分片,存储的数据就是一个简单的doc,数据量较小,如果需要使用分片,建议用_id分片。
{ "_id" : 文件ObjectId, 【默认索引字段】 "length" : 文件描述文档大小, "chunkSize" : 文件大小, "uploadDate" : 上传时间, 【默认索引字段】 "md5" : 废弃的字段,无视即可, "filename" : 文件名, 【默认索引字段】 "contentType" : 废弃的字段,无视即可, "aliases" : 废弃的字段,无视即可, "metadata" : 文件描述信息, }
chunks
chunks存储的是文件实际数据。根据文件大小不同会分多个数据片。数据结构:
{ _id:文件片ObjectId, 【默认索引字段】 files_id: 文件ObjectId, 【默认索引字段,推荐的分片键,可单独作为分片键使用】 n:文件片序号, 【默认索引字段,推荐的分片键,不要单独作为分片键使用,需要配合files_id使用】 data: 文件片二进制数据 }
官网介绍:https://docs.mongodb.com/manual/core/gridfs/index.html
如果上述集合不指定分片键,则默认存储在primary上。
清理策略
增加一个每日执行的定时任务。不同配置时,在不同时间触发删除操作。
优势:做起来简单。
劣势:需要额外开发定时任务,指定规则,删除时间只能控制到天。