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。
在MongoDB中,使用GridFS存储大于16 MB的文件。
在某些情况下,在MongoDB数据库中存储大文件可能比在系统级文件系统上更有效。
如果文件系统限制目录中文件的数量,则可以使用GridFS根据需要存储多个文件。
当你想从大文件的部分访问信息而不必将整个文件加载到内存中时,可以使用GridFS调用文件的各个部分,而不必将整个文件读入内存。
当你想保持你的文件和元数据自动同步和部署在一些系统和设施,你可以使用GridFS。当使用地理分布式副本集时,MongoDB可以将文件及其元数据自动分发到许多
如果您需要自动更新整个文件的内容,请不要使用GridFS。作为替代,您可以存储每个文件的多个版本,并在元数据中指定文件的当前版本。在上传文件的新版本之后,您可以更新原子更新中指示“最新”状态的元数据字段,并在需要时删除以前的版本。
此外,如果您的文件都小于16 MB ,请考虑将文件手动存储在单个文档中,而不是使用GridFS。您可以使用BinData数据类型来存储二进制数据。有关使用BinData的详细信息,请参阅驱动程序文档。
要使用GridFS存储和检索文件,请使用以下任一项:
一个MongoDB驱动程序。有关在驱动程序中 使用GridFS的信息,请参阅驱动程序文档。
该
GridFS将文件存储在两个集合中:
GridFS将这些集合放在一个普通的存储区中,每个存储区前面加上存储区名称。默认情况下,GridFS使用两个集合,一个名为
您可以选择不同的存储桶名称,也可以在单个数据库中创建多个存储桶。包含存储桶名称的完整集合名称受制于。
块的唯一ObjectId。
在
块的序列号。GridFS将所有块从0开始编号。
该块的有效载荷为BSON
此文档的唯一标识符。这
文档的大小(以字节为单位)。
在每个块的大小的字节。GridFS将文档分割成大小不等的块
版本2.4.10中更改:默认块大小从256 kB更改为255 kB。
GridFS首次存储文档的日期。这个值有
由filemd5命令返回的完整文件的MD5散列。这个值有
可选的。GridFS文件的可读名称。
可选的。GridFS文件的有效MIME类型。
可选的。一个别名字符串数组。
可选的。元数据字段可以是任何数据类型,可以保存任何你想存储的附加信息。如果您希望向
GridFS使用每个
GridFS的采用了独特的,复合的指数
符合 GridFS规范的驱动程序将自动确保在读取和写入操作之前存在此索引。有关您的GridFS应用程序的特定行为,请参阅相关的驱动程序文档。
如果此索引不存在,则可以使用
GridFS使用和字段在集合上使用索引。这个索引允许有效的检索文件,如下例所示:
符合 GridFS规范的驱动程序将自动确保在读取和写入操作之前存在此索引。有关您的GridFS应用程序的特定行为,请参阅相关的驱动程序文档。
如果此索引不存在,则可以使用
有两个集合要考虑与网格 -
如果您需要分割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应用程序的特定行为,请参阅相关的驱动程序文档。
如果此索引不存在,则可以使用
mongoshell 执行以下操作来创建它:
db 。fs 。大块。createIndex ( { files_id : 1 , n : 1 }, { unique : true } );
该files
指数
GridFS使用和字段在集合上使用索引。这个索引允许有效的检索文件,如下例所示:files
filename
uploadDate
db 。fs 。文件。find ( { filename : myFileName } )。排序( { uploadDate : 1 } )
符合 GridFS规范的驱动程序将自动确保在读取和写入操作之前存在此索引。有关您的GridFS应用程序的特定行为,请参阅相关的驱动程序文档。
如果此索引不存在,则可以使用
mongoshell 执行以下操作来创建它:
db 。fs 。文件。createIndex ( { filename : 1 , uploadDate : 1 } );
[1] | (1,2)使用术语的组块在GridFS的的上下文中不相关的使用术语块在分片的情况下。 |
拆分GridFS的
有两个集合要考虑与网格 - files和
chunks。
如果您需要分割GridFS数据存储,请使用
chunks集合设置或分片索引。
{ files_id : 1, n : 1 }
{files_id : 1 }
files_id是OBJECTID和变化 单调。
分片 集合时不能使用散列分片
chunks。
该
files集合很小,只包含元数据。GridFS所需的任何密钥都不适用于分片环境中的均匀分布。如果您必须分割
files集合,请使用该
_id字段,可能与应用程序字段结合使用。
离开
files取消转换允许所有文件元数据文档位于主分片上。
相关文章推荐
- mongodb 2.6 window 安装启动服务
- python mongodb压力测试脚本
- mongoDB命令
- linux下安装配置mongodb
- MongoDB源码概述——内存管理和存储引擎
- MongoDB源码概述——内存管理和存储引擎
- MongoDB入门篇--增删改查
- mongodb3.1.3安全认证
- Mongodb知识及使用总结(一)
- 8天学通MongoDB——第一天 基础入门
- 利用MongoDB存储scrapy的数据
- mongodb 学习笔记 04 -- 游标、索引
- mongodb维护常用命令
- 【Monkey Run】2015博客keep doing outline
- 用mongodb存储日志
- 10-【MongoDB入门教程】 Journaling日志机制
- MongoDB 在mac上安装
- 为首次部署MongoDB做好准备:容量计划和监控
- mongodb性能优化
- MongoDB常用操作命令大全