本文来介绍下MongoDB的GridFsTemplate如何使用


什么是GridFS

GridFS是一种将大型文件存储在MongoDB的文件规范。所有官方支持的驱动均实现了GridFS规范。GridFS是MongoDB中的一个内置功能,可以用于存放文件。数据库支持以BSON格式保存二进制对象。 但是MongoDB中BSON对象最大不能超过16MB。 GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档。这将容许我们有效的保存大的文件对象,特别对于那些巨大的文件,比如视频。

在这里插入图片描述


为什么要使用GridFS

我之前将文件上传到文件系统中,比如通过FTP上传到文件服务器。并将文件地址存储到MySQL数据库,我觉得这个方式挺好的呀,为什么要使用GridFS?

文件系统到了后期会变的很难管理,同时不利于扩展,此外我想做分布式文件系统也显得不那么容易。而GridFS却正好相反,它基于MongoDB的文件系统,便于管理和扩展。

普通文件系统对于大文件处理比较麻烦,需要考虑文件系统自身的限制,GridFS提供了什么好方案?

GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/块,每块chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。这一点对于很大的内容文件非常有用。此外,GridFS和MongoDB的分片使得你的文件可以分布到多个服务器上,而且没有增加操作的复杂性。

我可以直接把文件的二进制流存到MongoDB么?

MongoDB默认的文件大小上限为16MB。所以,超过这个大小是有问题的。如果你的文件,比如图片、音频、视频等超过了16MB,那么你就应该使用GridFS。


GridFS的两个集合

mongoDB中存储的数据

在这里插入图片描述

GridFS 使用两个集合来存储一个文件:fs.files与fs.chunks。我们可以使用下面命令来进行查看。

在这里插入图片描述

fs.files集合包含了文件的元数据。我们使用命令来查看

在这里插入图片描述

fs.chunks集合则存储实际的以256KB尺寸进行分割的文件块。如果你有分片的集合,那么文件块会分布到多台服务器上

在这里插入图片描述


本文小结

本文介绍了MongoDB中的GridFs是什么,后续会继续介绍GridFsTemplate如何来进行文件的存取操作。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐