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 } );
时间: 2024-11-03 22:19:45

MongoDB——GridFS的相关文章

【转】PHP操作MongoDB GridFS 存储文件

PHP操作MongoDB GridFS 存储文件,如图片文件 GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储.

MongoDB GridFS最佳应用概述

<MongoDB GridFS最佳应用概述> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs GridFS是MongoDB数据库之上的一个简单文件系统抽象.如果你熟悉Amazon S3的话,那么GridFS与之相似.为什么像MongoDB这样的NoSQL数据库会提供这样的一个文件层抽象呢? 一.使用GridFS的理由 理由如下: 1)存储用户产生的文件内容 大多数Web应用都允许用户上传文件.当用户使用关系数据库时,这些用户产生的文件会存储在文件系

MongoDB GridFS规范

This is being changed for 2.4.10 and 2.6.0-rc3. Tyler Brock's explanation: Now that the server uses power of 2 by default, if the default chunk size for gridfs is 256k we will almost always be throwing away some storage space. This is because if the

mongodb gridfs基本使用

Mongodb GridFS图片文件存储解决方案 之前解决方案是接收图片数据后,将图片直接存储到盘阵,然后通过Apache做服务器,将图片信息存储到数据库,并且存储一个Apache的访问路径. 目前需要后台服务存储图片,将图片存储到MongoDB集群中,然后通过Nginx中的nginx-gridfs模块进行访问,在浏览器中通过url访问,效果与Apache访问本地文件一样. 本方案的内容比较基础,以后会有深入了解和优化,敬请期待! 一.安装MongoDB (1)安装MongoDB 进入计划安装目

MongoDb GridFS的使用

MongoDb GridFS 是MongoDB的文件存储方案,主要用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频等),对大文件有着更好的性能. 要在C#中使用GridFS,首先安装Nuget包: MongoDB.Driver.GridFS Bucket GridFS中的数据也是分集合存储的,每个集合叫一个bucket,每个bucket里面可以存储多个文件: 在C#中使用bucket和使用集合差不多,创建一个GridFSBucket对象即可. var bucket = ne

MongoDB(八)Mongodb——GridFS存储

mongoDB的文档以BSON格式存储,支持二进制的数据类型,当我们把二进制格式的数据直接保存到mongoDB的文档中.但是当文件太大时,例如图片和视频等文件,每个文档的长度是有限的,于是mongoDb会提供了一种处理大文件的规范--GridFS. GridFS实现原理 在GridFS数据库中,默认使用fs.chunks 和fs.files来存储文件,其中fs.files集合存放文件的信息,fs.chunks存放文件的数据,一个fs.files集合中的一条记录内容如下,即一个file信息如下所示

MongoDB GridFS

1. GridFS说明: GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中. GridFS 可以更好的存储大于16M的文件. GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中. GridFS 用两个集合来存储一个文件:fs.files与fs.chun

MongoDB GridFS 初探

使用GridFS简单介绍: 列出文件: [[email protected] ~]# mongofiles listconnected to: 127.0.0.1 此时并没有任何文件存在. 上传文件: [[email protected] ~]# mongofiles put install.log -d librarayconnected to: 127.0.0.1added file: { _id: ObjectId('5616b8c4f1403ca60b0999d0'), filename

PHP操作MongoDB GridFS 存储文件,如图片文件

GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储. 01 <?php 02 // 初始化gridfs 03 $conn = new Mongo(); // 连接MongoDB 04 $db