GridFS是用于存储和检索超过16 MB大小限制的BSON文档文件的规范 。
注意相较于将一个文件存储在单条文档中,GridFS将文件分为多个部分或块[1],并将每个块存储为单独的文档 。默认情况下,GridFS使用的块默认大小为255kB;也就是说,除最后一个块,GridFS会将文件划分为255 kB的块 。最后一个块只有必要的大小 。同样,最后的那个块也不会大于默认的块大小,仅使用所需的空间以及一些其他元数据 。
GridFS 不支持多文档事务
GridFS使用两个集合来存储文件 。一个集合存储文件块,另一个集合存储文件元数据 。GridFS集合一节详细介绍了每个集合 。
当你从GridFS查询文件时,驱动程序将根据需要重新组装该文件所有的块 。你可以对GridFS存储的文件进行范围查询 。你还可以从文件的任意部分访问其信息,例如“跳到”视频或音频文件的中间 。
GridFS不仅可用于存储超过16 MB的文件,而且还可用于存储您要访问的任何文件而不必将整个文件加载到内存中 。另请参阅何时使用GridFS 。
什么时候使用GridFS
在MongoDB中,使用GridFS存储大于16 MB的文件 。
在某些情况下,在MongoDB数据库中存储大型文件可能比在系统级文件系统上存储效率更高 。
- 如果文件系统限制了目录中文件的数量,则可以使用GridFS来存储所需数量的文件 。
- 当你要访问大文件部分的信息而不必将整个文件加载到内存中时,可以使用GridFS来调用文件的某些部分,而无需将整个文件读入内存 。
- 当你希望保持文件和元数据在多个系统和设施之间自动同步和部署时,可以使用GridFS 。使用地理分布的复制集时,MongoDB可以自动将文件及其元数据分发到多个mongod实例和设施 。
此外,如果文件均小于16 MB BSON文档大小限制,请考虑将每个文件存储在单个文档中,而不是使用GridFS 。您可以使用BinData数据类型存储二进制数据 。有关使用BinData的详细信息,请参见驱动程序文档 。
使用GridFS
要使用GridFS存储和检索文件,请使用以下任一方法:
- MongoDB驱动程序 。请参阅驱动程序文档,以获取有关将GridFS与驱动程序一起使用的信息 。
- mongofiles命令行工具 。有关文档,请参见mongofiles参考 。
GridFS Collections
GridFS将文件存储在两个集合中:
- 块存储二进制块 。有关详细信息,请参见chunks集合 。
- 文件存储文件的元数据 。有关详细信息,请参见文件集合 。
- fs.files
- fs.chunks
块集合
块[1]集合中的每个文档都代表了GridFS中表示的文件的不同的块 。此集合中的文档具有以下格式:
{"_id" : <ObjectId>,"files_id" : <ObjectId>,"n" : <num>,"data" : <binary>}
chunks集合中的文档包含以下字段:- chunks._id
- 块的唯一ObjectId 。
- chunks.files_id
- 在files集合中指定的“父”文档的_id 。
- chunks.n
- 块的序列号 。GridFS从0开始对所有块进行编号 。
- chunks.data
- 块BSON二进制类型的荷载 。
文件集合中的每个文档代表GridFS中的一个文件 。
{"_id" : <ObjectId>,"length" : <num>,"chunkSize" : <num>,"uploadDate" : <timestamp>,"md5" : <hash>,"filename" : <string>,"contentType" : <string>,"aliases" : <string array>,"metadata" : <any>,}
files集合中的文档包含以下一些或全部字段:
推荐阅读
- 喝茉莉花茶的危害,茉莉花茶如何喝
- 含笑花茶如何做,这些花茶真的可以祛斑
- 喝自己炒茶,如何鉴别普洱茶是不是好茶
- 新手如何在淘宝网上开店 新手如何开淘宝店铺
- 如何看懂化妆品成分表
- 刹车片多久更换一次?如何判断更换标准?这篇文章全部告诉你
- 车龄超过十年的车安全性能大打折扣,赶紧换车?事实果真如此吗?
- 如何预防秋冬季呼吸道疾病
- 如何绑定儿童医保电子凭证?手把手教您
- 负面情绪竟然可以引发这么多疾病 出现负面情绪还如何缓解