【问题标题】:Should I use GridFS or binary data to store & retrieve images from MongoDB?我应该使用 GridFS 还是二进制数据从 MongoDB 存储和检索图像?
【发布时间】:2011-12-10 00:54:05
【问题描述】:

我想知道哪个更好/更快

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

【问题讨论】:

    标签: mongodb gridfs


    【解决方案1】:

    GridFS 旨在以有效的方式处理文件。 http://www.mongodb.org/display/DOCS/When+to+use+GridFS

    不要忘记您可能需要翻译数据 到一个文件并返回。

    但可以肯定的是,请根据您的使用模式进行性能测试。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • helo @luckytaxi "0 反对票 我使用 GridFS 来存储照片和文档。它非常简单,从集合中检索它以在本地显示或保存很容易。"你能解释一下你是如何在本地进行图像上传、检索和显示的吗?
      • 任何这样的例子,我实际上是想为用户个人资料图片做这件事
      【解决方案3】:

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

      但是,如果您的图像较大,我会使用 GridFS。 GridFS 有一些特性使其非常擅长处理您应该考虑的图像:

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

      在性能方面,对常规文档的读/写应该与对 GridFS 的读/写没有什么不同。我不会认为性能是选择其中任何一个的区别因素。

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-08-29
        • 1970-01-01
        • 2014-02-25
        • 2014-12-05
        • 2013-09-15
        • 1970-01-01
        • 2014-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多