存储图像:数据库或文件系统 -

时间:2009-08-05 16:04:54

标签: database image filesystems storage

我在这方面读了一些帖子,但我仍然不明白在我的情况下什么是最好的解决方案。

我开始编写一个新的webApp,后端将提供 1-10万个图像。 (单张图片的平均尺寸 200-500kB

我的网站会同时向 100-1000位用户提供内容和图片。

我还希望尽可能降低提供商的成本(但这是次要要求)。 我认为与DB大小的成本相比,文件系统空间更便宜。

就个人而言,我喜欢将所有图像都放在数据库中,但任何建议都会非常感激:)

您认为在我的情况下,数据库方法是正确的选择吗?

7 个答案:

答案 0 :(得分:22)

将所有这些图像放入数据库将使其变得非常非常大。这意味着,当数据库引擎可以缓存热门应用程序数据时,您的数据库引擎将忙于缓存所有这些图像(这是一项并非真正设计的任务)。

将文件缓存到操作系统和/或反向代理 - 他们会更好。

答案 1 :(得分:15)

在文件系统上存储图像的其他一些原因:

  • 即使数据库繁忙或停机,图像服务器也可以运行。
  • 文件系统是存储文件,并且非常高效。
  • 在数据库中转储数据意味着更慢的备份和其他操作。
  • 没有服务器端编码需要提供图像,只需普通的旧IIS / Apache。
  • 您可以使用廉价的Web服务器或可能的CDN来更快地扩展。
  • 您可以在不涉及数据库的情况下执行相关工作(生成缩略图等)。
  • 您的数据库服务器可以将更多“真实”表数据保存在内存中,这样您就可以获得查询的数据库速度。如果它使用其宝贵的内存来保持缓存的图像文件,那么在内存中拥有更多的照片索引时,这几乎不会给你带来任何速度。

答案 2 :(得分:11)

大多数大型网站都使用文件系统。

请参阅Store pictures as files or in the database for a web app?

答案 3 :(得分:5)

在处理二进制对象时,遵循以文档为中心的体系结构方法,而不是将pdf和图像等文档存储在数据库中,当您开始看到数据库的各种性能问题时,最终必须重构它。只需将文件存储在文件系统中,并将路径放在数据库的表中。您将用于序列化并将其保存在数据库中的数据类型的大小也存在物理限制。只需将其存储在文件系统上即可访问它。

答案 4 :(得分:4)

你的第一句话说你已经读过一些关于这个主题的帖子,所以我不会费心去链接那些涉及这个问题的文章。根据我的经验,根据您发布的图像数量和图像大小,如果将它们存储在数据库中,您将在数据库性能方面付出沉重的代价。我将它们存储在文件系统中。

答案 5 :(得分:3)

您使用的数据库是什么? MS SQL Server 2008提供FILESTREAM存储

  

允许使用SQL Server 2008和NTFS文件系统的组合来存储和有效访问BLOB数据。它涵盖了BLOB存储的选择,配置Windows和SQL Server以使用FILESTREAM数据,将FILESTREAM与其他功能相结合的注意事项,以及分区和性能等实现细节。

details

答案 6 :(得分:0)

我们使用FileNet,一个针对成像优化的服务器。这个很贵。更便宜的解决方案是使用文件服务器。

请不要考虑在数据库服务器上存储大文件。

正如其他人所提到的,存储对数据库中大文件的引用。