我应该使用GridFS或二进制数据来存储和检索MongoDB中的图像吗?

maa*_*cls 13 mongodb gridfs

我想知道哪个更好/更快:

  1. 拥有一个单独的文档集合,其中只包含保存为二进制数据的图像,可能还包含一些元数据.
  2. 或使用GridFS存储图像.

aga*_*ian 22

如果图像很小,则可以将它们作为二进制数据存储在集合中的文档中.只需考虑每次查询文档时都要检索它们(除非从查询中排除"图像"字段).

但是,如果您的图像较大,我会使用GridFS.GridFS具有一些功能,使其非常善于处理您应该考虑的图像:

  • 对于较大的图像,当它们存储在GridF中时,它们将被分成块,您可以存储非常大的文件.如果您尝试在文档中存储图像,则会受到文档最大16Mb大小的限制,并且占用的空间需要用于实际文档.
  • 您可以向图像本身添加元数据,并针对这些属性运行查询,就像您从集合中的常规文档执行查询一样.因此,GridFS与关于图像的元数据的文档一样好.
  • 我真的很喜欢我在图像上计算MD5哈希值.(这对我的一些案例非常有用).
  • 通过在GridFS中存储图像,您可以将图像预处理保存为二进制格式(不是很重要,但是GridFS的便利性)

在性能方面,针对常规文档的读/写应该与针对GridFS进行读/写操作没有什么不同.我不认为性能是选择任何一个的差异化因素.

我个人的建议是使用GridFS,但您需要分析您的特定用例.

希望这可以帮助.