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

我应该使用GridFS还是二进制数据来存储&;从MongoDB检索图像?,mongodb,gridfs,Mongodb,Gridfs,我想知道哪个更好/更快: 有一个单独的文档集合,其中只包含作为二进制数据保存的图像,可能还有一些元数据 或者使用GridFS存储图像 GridFS的开发目的是以高效的方式处理文件。 别忘了你可能需要翻译数据 到一个文件然后返回 但可以肯定的是,要做一个性能测试,考虑到您的使用模式。我使用GridFS存储照片和文档。这很容易,从集合中检索它以在本地显示或保存也很容易。您可以将元数据与二进制数据一起存储在同一集合中。这样,您就不需要创建额外的集合来存储它们 例如,在我的一个项目中,我将用户档案照片

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

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

  • GridFS的开发目的是以高效的方式处理文件。

    别忘了你可能需要翻译数据 到一个文件然后返回


    但可以肯定的是,要做一个性能测试,考虑到您的使用模式。

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


    例如,在我的一个项目中,我将用户档案照片与用户名、文件类型和上载日期一起存储。

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

    但是,如果您的图像较大,我会使用GridFS。GridFS的一些特性使其能够很好地处理您应该考虑的图像:

    • 对于较大的图像,当它们存储在GridFs中时,它们将被分割成块,您可以存储非常大的文件。如果您试图在文档中存储图像,则会受到文档最大16Mb大小的限制,并且会占用实际文档所需的空间
    • 您可以将元数据添加到图像本身,并对这些属性运行查询,就像从集合中的常规文档执行此操作一样。所以GridFS就像一个关于图像元数据的文档一样好
    • 我真的很喜欢在图像上计算MD5哈希值。(这对我的一些案例非常有用)
    • 通过将图像存储在GridFS中,您可以将图像的预处理保存为二进制格式(这不是什么大问题,但是GridFS很方便)
    就性能而言,对常规文档的读/写应该与对GridFS的读/写没有什么不同。我不认为在选择任何一个方面表现是一个差异。 我个人的建议是使用GridFS,但您需要针对您的特定用例进行分析


    希望这能有所帮助。

    helo@luckytaxi,“我使用GridFS存储照片和文档。这很简单,从收藏中检索照片以在本地显示或保存也很容易。”你能解释一下你是如何在本地上传、检索和显示图像的吗?有没有这样的例子,实际上,我正试图为用户配置文件图片这样做