首页 > 代码库 > MongoDB——GridFS

MongoDB——GridFS

    GridFS是一个规范的存储和检索文件超过16 mb的bson文档大小限制。

而不是将文件存储在一个文档中,GridFS文件分为部分,或块,每个块作为一个单独的文档。使用FridFS与使用分片无

关。在默认情况下网格文件系统块大小限制为255 k。GridFS文件系统使用两个集合存储文件。一个收集存储文件块,

其他商店文件元数据。

技术分享

    当你查询GridFS文件系统存储文件时,驱动或客户端将重新组装块。你可以通过GridFS文件系统上执行范围查询

文件存储。你也可以从任意部分的文件访问信息,你可以“跳过”的视频或音频文件。

网格文件系统不仅是有用的用于存储超过16 mb的文件,还用于存储任何文件,您想要访问而不需要整个文件加载到内

存中。


什么情况下使用?


    在MongoDB文档集合,你应该总是使用GridFS存储文件大于16 MB。在某些情况下,在MongoDB数据库比系统级文件

系统存储大文件可能更有效。

    (1)如果你的文件系统限制一个目录中的文件的数量,你可以根据需要使用GridFS文件系统存储尽可能多的文件。

    (2)当你想让你的文件和元数据自动同步和部署多个系统和设施。当使用分布式副本集MongoDB可以分发文件和

元数据自动生成mongod实例和设施。

    (3)当您想要访问的信息来自部分大文件,而无需全部文件加载到内存中,您可以使用GridFS召回部分文件不用

读取整个文件到内存中。

    如果需要自动更新整个文件的内容,不要使用GridFS。作为替代,你可以将每个文件存储多个版本,每个文件并指定元数据文件的当前版本。

    当上传新版本的文件之后,您可以更新元数据字段,在原子钟标明最新状态。之后删除以前的版本。


实现GridFS


    使用GridFS文件系统来存储和检索文件:

    (1)引入驱动

    (2)mongofiles mongo shell命令行工具。参考文档    点击打开链接


GridFS集合


    GridFS将文件存储在两个集合:
    块集合——存储二进制数据块。

    块中的每个文档集合代表一个单独的块GridFS文件。下面是一个原型文档块集合。

{
  "_id" : <ObjectId>,
  "files_id" : <ObjectId>,
  "n" : <num>,
  "data" : <binary>
}

    该块集合包含以下字段:
    chunks._id  独特的ObjectId块。
    chunks.files_id   父类文档事务id
    chunks.n     块的序列号。GridFS文件系统数据块,从0开始。
    chunks.data   块的有效载荷BSON二进制类型。
    块使用复合索引文件集合id和n


文件——存储文件的元数据。


    每个文档的文件集合表示GridFS文件系统中的一个文件存储。考虑下面的原型文档的文件集合:

{
  "_id" : <ObjectId>,
  "length" : <num>,
  "chunkSize" : <num>,
  "uploadDate" : <timestamp>,
  "md5" : <hash>,

  "filename" : <string>,
  "contentType" : <string>,
  "aliases" : <string array>,
  "metadata" : <dataObject>,
}

    文档的文件集合包含以下字段的部分或全部。应用程序可以创建额外的任意字段:

    files._id  本文档的惟一ID。id是为原始文档选择的数据类型。BSON ObjectId MongoDB文档的默认类型。

    files.length  文件的大小(以字节为单位)。

    files.chunkSize  每个块的大小。GridFS文件系统将文档划分为指定的块大小。默认大小是255字节。2.4.10版

本的变化:默认从256 k到256 k块大小改变。

    files.uploadDate  文档第一次由GridFS存储的日期。这个值的日期类型。

    files.md5  MD5散列filemd5返回的命令。这个值是字符串类型。

    files.filename  可选的。一个可读的文档的名称。

    files.contentType  可选的。一个合法的文档的MIME类型。

    files.aliases  可选的。一个别名字符串数组。

    files.metadata  可选的。想要存储任何额外的信息。



GridFS索引


    GridFS文件系统使用一个独特的、复合索引文件的块集合id和n字段。id字段包含的id的文件块的“父”文档。n

字段包含块的序列号。网格文件系统数据块,从0开始。

    GridFS文件系统索引允许使用的文件块的有效检索id和n值,如以下示例所示:

cursor = db.fs.chunks.find({files_id: myFileID}).sort({n:1});

    如果你的驱动没有创建这个索引,使用mongo shell执行以下操作:

db.fs.chunks.ensureIndex( { files_id: 1, n: 1 }, { unique: true } );


MongoDB——GridFS