首页 » MongoDB实战 » MongoDB实战全文在线阅读

《MongoDB实战》附录C 二进制数据与GridFS

关灯直达底部

在存储图片、缩略图、音频和其他二进制文件时,很多应用程序都只依赖文件系统。虽然文件系统提供了对文件的快速访问能力,但也会带来组织混乱问题。考虑到大多数文件都限制了每个目录的文件数,如果要保存数以百万的文件,需要设计一套策略,将文件放入多个目录里。另一个难点涉及元数据,因为文件元数据仍然存储在数据库里,所以想对文件及其元数据进行精确备份会极其复杂。

针对某些使用场景,直接将文件保存在数据库里更加合理,因为这能简化文件的组织与备份。在MongoDB中,可以使用BSON二进制类型来保存各种二进制数据。这种数据类型与RDBMS BLOB(binary large object)类型相对应,是MongoDB提供的两种二进制对象存储方式的基础。

第一种方式,每个文件一个文档,适用于较小的二进制对象。如果要对大量缩略图或MD5进行分类保存,那么单一文档二进制存储会更简单一些。另一方面,你可能希望保存大图片和音频文件。这时GridFS会是更好的选择,它是MongoDB用于存储任意大小二进制对象的API。下文中你会看到这两种存储技术的复杂示例。