14

我想知道哪个更好/更快

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

3 回答 3

23

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

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

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

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

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

希望这可以帮助。

于 2011-10-19T03:32:21.627 回答
3

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

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

于 2011-10-18T12:50:05.167 回答
1

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

不要忘记您可能必须将数据转换为文件并返回。

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

于 2011-10-18T12:46:06.977 回答