GridFS是用于存储和检索超过16 MB BSON文档大小限制的文件的规范。
注意
GridFS不支持多文档事务。
GridFS不会将文件存储在单个文档中,而是将文件分为多个部分或大块[1],并将每个大块存储为单独的文档。默认情况下,GridFS使用的默认块大小为255 kB;默认大小为255 kB。也就是说,除了最后一个块,GridFS会将文件划分为255 kB的块。最后一块只有必要的大小。类似地,不大于块大小的文件仅具有最终块,仅使用所需的空间以及一些其他元数据。
GridFS使用两个集合来存储文件。一个集合存储文件块,另一个集合存储文件元数据。GridFS集合一节 详细介绍了每个集合。
当您查询GridFS文件时,驱动程序将根据需要重新组装块。您可以对通过GridFS存储的文件执行范围查询。您还可以从文件的任意部分访问信息,例如“跳到”视频或音频文件的中间。
GridFS不仅可用于存储超过16 MB的文件,而且还可用于存储要访问的任何文件而不必将整个文件加载到内存中。另请参阅 何时使用GridFS。
在MongoDB中,使用GridFS存储大于16 MB的文件。
在某些情况下,在MongoDB数据库中存储大型文件可能比在系统级文件系统上存储效率更高。
mongod
实例和设施。如果您需要自动更新整个文件的内容,请不要使用GridFS。或者,您可以存储每个文件的多个版本,并在元数据中指定文件的当前版本。上载文件的新版本后,您可以更新原子更新中指示“最新”状态的元数据字段,然后在需要时删除以前的版本。
此外,如果文件均小于16 MB的限制,请考虑将每个文件存储在单个文档中,而不要使用GridFS。您可以使用BinData数据类型存储二进制数据。有关使用BinData的详细信息,请参见驱动程序文档。BSON
Document Size
要使用GridFS存储和检索文件,请使用以下任一方法:
mongofiles
命令行工具。有关mongofiles
文档,请参见
参考。GridFS将文件存储在两个集合中:
chunks
存储二进制块。有关详细信息,请参见
Chunks Collection。files
存储文件的元数据。有关详细信息,请参见
文件集合。GridFS通过使用存储桶名称为每个集合添加前缀,将集合放在一个公共存储桶中。默认情况下,GridFS使用两个集合,其存储桶名为fs
:
fs.files
fs.chunks
您可以选择其他存储桶名称,也可以在一个数据库中创建多个存储桶。完整集合名称(包括存储桶名称)受的约束。namespace length limit
chunks
系列¶chunks
[1]集合中的每个文档代表一个单独的文件块,如GridFS所示。此集合中的文档具有以下格式:
chunks
集合中的文档包含以下字段:
chunks.
files_id
¶在_id
“父”的文件,如在指定的files
集合。
chunks.
n
¶块的序列号。GridFS从0开始对所有块进行编号。
files
系列¶files
集合中的每个文档代表GridFS中的一个文件
。
files
集合中的文档包含以下一些或全部字段:
files.
length
¶文档的大小(以字节为单位)。
files.
chunkSize
¶每个块的大小(以字节为单位)。GridFS将文档划分为多个大小chunkSize
,最后一个大小除外,最后一个大小仅根据需要而定。默认大小为255 KB。
files.
uploadDate
¶GridFS首次存储文档的日期。此值具有
Date
类型。
files.
md5
¶不推荐使用
FIPS 140-2禁止使用MD5算法。MongoDB驱动程序已弃用MD5支持,并将在以后的版本中删除MD5生成。需要文件摘要的应用程序应在GridFS外部实现它并存储在中files.metadata
。
filemd5命令返回的完整文件的MD5哈希。此值具有String
类型。
files.
filename
¶可选的。GridFS文件的可读名称。
files.
contentType
¶不推荐使用
可选的。GridFS文件的有效MIME类型。仅用于应用程序。
使用files.metadata
存储相关的MIME类型GridFS的文件的信息。
files.
aliases
¶不推荐使用
可选的。别名字符串数组。仅用于应用程序。
使用files.metadata
存储相关的MIME类型GridFS的文件的信息。
files.
metadata
¶可选的。元数据字段可以是任何数据类型,并且可以包含您要存储的任何其他信息。如果希望向files
集合中的文档添加其他任意字段,请将其添加到元数据字段中的对象。
GridFS使用每个chunks
和files
集合上的索引来提高效率。为了方便起见,符合GridFS规范的驱动程序会自动创建这些索引。您还可以根据需要创建任何其他索引,以满足您的应用程序需求。
有两个集合考虑与GridFS的 - files
和
chunks
。
chunks
集合¶要分片chunks
集合,请使用或作为分片键索引。是一个
objectid并且单调变化。{ files_id : 1, n : 1
}
{ files_id : 1 }
files_id
对于不运行filemd5
以验证上传成功的MongoDB驱动程序(例如,支持MongoDB 4.0或更高版本的MongoDB驱动程序),可以对
集合使用哈希分片chunks
。
如果MongoDB驱动程序运行filemd5
,则不能使用
Hashed Sharding。有关详细信息,请参阅SERVER-9888。