您的位置:首页 > 数据库 > Mongodb

MongoDB GridFS

2015-06-26 09:28 781 查看
何时使用GridFS
使用GridFS
GridFS集合
GridFS索引
分片GridFS
其他资源

GridFS是用于存储和检索超过 BSON- document大小限制 16
MB的文件的规范。

GridFS不是将文件存储在单个文档中,而是将文件分割成部分或块[1],并将每个块存储为单独的文档。默认情况下,GridFS使用255
kB的块大小; 也就是说,除了最后一个块之外,GridFS将文件分成255 kB块。最后一个块只有必要的大。同样,不大于块大小的文件只有最后一个块,只需使用尽可能多的空间和一些额外的元数据。

GridFS使用两个集合来存储文件。一个集合存储文件块,另一个存储文件元数据。GridFS集合部分 详细描述了每个集合。

在查询GridFS文件时,驱动程序将根据需要重新组合块。您可以对通过GridFS存储的文件执行范围查询。您还可以从任意部分的文件访问信息,例如“跳过”到视频或音频文件的中间。

GridFS不仅可用于存储超过16 MB的文件,还可用于存储您要访问的任何文件,而无需将整个文件加载到内存中。另请参见 何时使用GridFS

版本2.4.10中更改:默认块大小从256 kB更改为255 kB。


何时使用GridFS的

在MongoDB中,使用GridFS存储大于16 MB的文件。
在某些情况下,在MongoDB数据库中存储大文件可能比在系统级文件系统上更有效。

如果文件系统限制目录中文件的数量,则可以使用GridFS根据需要存储多个文件。
当你想从大文件的部分访问信息而不必将整个文件加载到内存中时,可以使用GridFS调用文件的各个部分,而不必将整个文件读入内存。
当你想保持你的文件和元数据自动同步和部署在一些系统和设施,你可以使用GridFS。当使用地理分布式副本集时,MongoDB可以将文件及其元数据自动分发到许多
mongod
实例和设施。

如果您需要自动更新整个文件的内容,请不要使用GridFS。作为替代,您可以存储每个文件的多个版本,并在元数据中指定文件的当前版本。在上传文件的新版本之后,您可以更新原子更新中指示“最新”状态的元数据字段,并在需要时删除以前的版本。
此外,如果您的文件都小于16 MB ,请考虑将文件手动存储在单个文档中,而不是使用GridFS。您可以使用BinData数据类型来存储二进制数据。有关使用BinData的详细信息,请参阅驱动程序文档。
BSONDocument Size



使用GridFS的

要使用GridFS存储和检索文件,请使用以下任一项:

一个MongoDB驱动程序。有关在驱动程序中 使用GridFS的信息,请参阅驱动程序文档。
mongofiles
命令行工具。请参阅
mongofiles
文档的 参考。


GridFS的集合

GridFS将文件存储在两个集合中:

chunks
存储二进制块。有关详细信息,请参阅 块组合
files
存储文件的元数据。有关详细信息,请参阅 文件集合

GridFS将这些集合放在一个普通的存储区中,每个存储区前面加上存储区名称。默认情况下,GridFS使用两个集合,一个名为
fs


fs.files

fs.chunks


您可以选择不同的存储桶名称,也可以在单个数据库中创建多个存储桶。包含存储桶名称的完整集合名称受制于。
namespace length limit



chunks
系列

chunks
[1]集合中的每个文档都代表GridFS中表示的不同文件块。本集合中的文档具有以下形式:

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


chunks
集合中的文档包含以下字段:

chunks.
_id

块的唯一ObjectId

chunks.
files_id

_id
“父”的文件,如在指定的
files
集合。

chunks.
n

块的序列号。GridFS将所有块从0开始编号。

chunks.
data

该块的有效载荷为BSON
Binary
类型。


files
系列

files
集合中的每个文档都代表GridFS中的一个文件 。

{
“_id”  : < 的ObjectId > ,
“长度”  : < NUM > ,
“CHUNKSIZE”  : < NUM > ,
“uploadDate”  : < 时间戳> ,
“MD5”  : < 哈希> ,
“文件名”  : < 字符串> ,
“ contentType“  : < string > ,
”别名“  : < 字符串 数组>,
“元数据”  : <任何> ,
}


files
集合中的文档包含以下部分或全部字段:

files.
_id

此文档的唯一标识符。这
_id
是您为原始文档选择的数据类型。MongoDB文档的默认类型是BSON ObjectId

files.
length

文档的大小(以字节为单位)。

files.
chunkSize

在每个块的大小的字节。GridFS将文档分割成大小不等的块
chunkSize
,除了最后一块之外,只有大小需要。默认大小是255千字节(KB)。

版本2.4.10中更改:默认块大小从256 kB更改为255 kB。

files.
uploadDate

GridFS首次存储文档的日期。这个值有
Date
类型。

files.
md5

filemd5命令返回的完整文件的MD5散列。这个值有
String
类型。

files.
filename

可选的。GridFS文件的可读名称。

files.
contentType

可选的。GridFS文件的有效MIME类型。

files.
aliases

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

files.
metadata

可选的。元数据字段可以是任何数据类型,可以保存任何你想存储的附加信息。如果您希望向
files
集合中的文档添加其他任意字段,请将其添加到元数据字段中的对象。


GridFS的索引

GridFS使用每个
chunks
files
集合上的索引来提高效率。符合GridFS规范的驱动程序会自动创建这些索引以方便使用。您还可以根据需要创建任何其他索引,以满足应用程序的需求。


chunks
指数

GridFS的采用了独特的复合的指数
chunks
使用的是集合
files_id
n
领域。这可以有效地检索块,如以下示例所示:

db 。fs 。大块。find ( {  files_id : myFileID  }  )。排序( {  n : 1  }  )


符合 GridFS规范的驱动程序将自动确保在读取和写入操作之前存在此索引。有关您的GridFS应用程序的特定行为,请参阅相关的驱动程序文档。
如果此索引不存在,则可以使用
mongo
shell 执行以下操作来创建它:

db 。fs 。大块。createIndex ( {  files_id : 1 , n : 1  }, {  unique : true  }  );



files
指数

GridFS使用和字段在集合上使用索引。这个索引允许有效的检索文件,如下例所示:
files
filename
uploadDate


db 。fs 。文件。find ( {  filename : myFileName  }  )。排序( {  uploadDate : 1  }  )


符合 GridFS规范的驱动程序将自动确保在读取和写入操作之前存在此索引。有关您的GridFS应用程序的特定行为,请参阅相关的驱动程序文档。
如果此索引不存在,则可以使用
mongo
shell 执行以下操作来创建它:

db 。fs 。文件。createIndex ( {  filename : 1 , uploadDate : 1  }  );


[1]12)使用术语的组块在GridFS的的上下文中不相关的使用术语块在分片的情况下。


拆分GridFS的

有两个集合要考虑与网 -
files
chunks

如果您需要分割GridFS数据存储,请使用
chunks
集合设置或分片索引。
{ files_id : 1, n : 1 }
{files_id : 1 }

files_id
OBJECTID和变化 单调
分片 集合时不能使用散列分片
chunks

files
集合很小,只包含元数据。GridFS所需的任何密钥都不适用于分片环境中的均匀分布。如果您必须分割
files
集合,请使用该
_id
字段,可能与应用程序字段结合使用。
离开
files
取消转换允许所有文件元数据文档位于主分片上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: