前言 :GridFS从名字来看,就明白是一个文件系统,它是mongodb的一个子模块,使用GridFS能够基于mongodb来持久存储文件.而且支持分布式应用(文件分布存储和读取). java
使用场景:若是你的系统有以下情景 nginx
1) 有大量的上传图片(用户上传或者系统自己的文件发布等) web
2) 文件的量级处于飞速增加,有可能打到单机操做系统本身的文件系统的查询性能瓶颈,甚至超过单机硬盘的扩容范围. mongodb
3) 文件的备份(不适用gridfs这种三方也能够作,可是不尽方便),文件系统访问的故障转移和修复.. 分布式
4) 文件的索引,存储除文件自己之外还须要关联更多的元数据信息(好比,不单单存储文件,还要保存一些文件的发布式做者/发布时间/文件tag属性等等自定义信息)而且须要索引的... 工具
5) 基于4),对文件的分类模糊,若是采用操做系统的文件系统,文件夹分类关系混乱或者没法分类时.. 性能
6) 当前系统是基于web的,对图片的访问根据url了规则路由的..(普通文件系统也能够) url
7) 文件尺寸较小,并且众多,且文件有可能被迁移/删除等.. spa
GridFS和其余分布式文件系统相比,并无什么特殊的地方....若是有,那就是它和mongodb有一腿... 操作系统
GridFS是mongodb中用户存储大对象的工具,对于mongodb,BSON格式的数据(文档)存储有尺寸限制,最大为16M.可是在实际系统开发中,常常会有上传图片或者文件的功能,这些文件可能尺寸会很大..咱们能够借用Gridfs来辅助实现这些文件的管理.
GridFS会将大文件对象分割成多个小的chunk(文件片断),通常为256k/个,每一个chunk将做为mongodb的一个文档(document)被存储在chunks集合中..gridfs模块会为每一个文件建立chunks和files信息.每一个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中.files集合中的文档就是BSON格式,可使用mongodb的索引等等特性,固然能够对files文档作数据分析..
java中使用GridFS存储文件的代码样例:
存储的文件,能够经过mongo的指令去查看..
对于GridFS文件的web访问方式,你们能够搜索一下Gridfs + nginx,既可获取相应的信息..