blog » MongoDB » 基于MongoDB GridFS的图片存储

基于MongoDB GridFS的图片存储

GridFS是mongodb的一个子模块,使用GridFS可以基于mongodb来持久存储文件。并且支持分布式应用(文件分布存储和读取)。GridFS是mongodb中用户存储大对象的工具,对于mongodb,BSON格式的数据(文档)存储有尺寸限制,最大为16M。但是在实际系统开发中,经常会有上传图片或者文件的功能,这些文件可能尺寸会很大。我们可以借用Gridfs来辅助实现这些文件的管理。

Mongo GFS的文件表是由 表名.files表名.chunks构成,前者是文件信息构成,后者是文件的内容,两者通过_id与files_id建立关联。

GridFS会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为mongodb的一个文档(document)被存储在chunks集合中。gridfs模块会为每个文件创建chunks和files信息。每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中.files集合中的文档就是BSON格式,可以使用mongodb的索引等等特性,当然可以对files文档做数据分析。

使用场景:
如果你的系统有如下情景

  1. 有大量的上传图片(用户上传或者系统本身的文件发布等)
  2. 文件的量级处于飞速增长,有可能打到单机操作系统自己的文件系统的查询性能瓶颈,甚至超过单机硬盘的扩容范围。
  3. 文件的备份(不适用gridfs这种三方也可以做,但是不尽方便),文件系统访问的故障转移和修复。。
  4. 文件的索引,存储除文件本身以外还需要关联更多的元数据信息(比如,不仅仅存储文件,还要保存一些文件的发布式作者/发布时间/文件tag属性等等自定义信息)并且需要索引的。。。
  5. 基于4),对文件的分类模糊,如果采用操作系统的文件系统,文件夹分类关系混乱或者无法分类时。。
  6. 当前系统是基于web的,对图片的访问根据url了规则路由的。。(普通文件系统也可以)
  7. 文件尺寸较小,而且众多,且文件有可能被迁移/删除等。。

This post has already been read 5612 times!

Related posts

RSS 2.0 | leave a response | trackback

发表评论