我应该使用GridFS或二进制数据来存储&从MongoDB检索图像?

时间:2011-10-18 11:45:03

标签: mongodb gridfs

我想知道哪个更好/更快

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

4 个答案:

答案 0 :(得分:20)

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

但是,如果您的图像较大,我会使用GridFS。 GridFS具有一些功能,可以很好地处理您应该考虑的图像:

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

就性能而言,针对常规文档的读/写应该与针对GridFS进行读/写操作没有什么不同。我不认为性能是选择其中任何一个的区别。

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

希望这有帮助。

答案 1 :(得分:3)

我使用GridFS来存储照片和文档。它非常简单,从集合中检索它以便在本地显示或保存很容易。您可以将元数据与二进制数据一起存储在同一集合中。这样您就不需要创建其他集合来存储它们。

例如,在我的某个项目中,我会存储用户个人资料照片以及用户名,文件类型和上传日期。

答案 2 :(得分:2)

我写了一篇博客文章,介绍了在MongoDB中存储二进制数据和使用GridFS的权衡。请参阅:https://alexmarquardt.com/2017/03/02/trade-offs-to-consider-when-storing-binary-data-in-mongodb/

免责声明:我是MongoDB的员工。

答案 3 :(得分:1)

开发GridFS以有效地处理文件。 http://www.mongodb.org/display/DOCS/When+to+use+GridFS

不要忘记您可能需要翻译数据 到文件然后回来。

但可以肯定的是,进行一项考虑到您的使用模式的性能测试。