存储个人资料图片。 (数据库还是文件系统?)

时间:2011-01-16 19:57:12

标签: php database image

  

可能重复:
  Storing Images in DB - Yea or Nay?

我需要存储个人资料照片。他们很多。

我不确定是否应该将它们存储在数据库中。我甚至不确定这是一个好主意,或者我是否应该将它们存储在服务器上的单独目录中,并禁止使用HTAccess访问它们。

但我对HTAccess并不过分熟悉,当我使用片段禁止访问某个文件夹时,它从未奏效过。

我正在使用winhost.com来托管我的网站,所以我认为HTAccess会起作用。

有人可以建议哪种方式可以更好地在一台服务器上存储数以万计的个人资料图片?我已经阅读了很多我在谷歌上发现的博客,论坛帖子等等,因为有一半的人提出了一件事,而另一半不同意并提议使用数据库,那就更加困惑了。

3 个答案:

答案 0 :(得分:2)

个人经验表明,在数据库中存储大量图像会使数据库备份速度变慢。当您开始运行可重复的测试,或更新数据库架构并且您想要进行临时备份时,以及在一般情况下,这可能会令人恼火。此外,根据数据库,存储blob(这不可避免地意味着您存储的是非固定长度的行)可能会使查询表变得非常慢 - 尽管可以通过适当的索引轻松修复。

如果您将它们存储在文件系统中并按照您的建议直接与您的网络服务器一起提供,那么您会发现一个问题是如果您只希望登录用户看到它们,如何正确地访问它们。这取决于您的应用程序的设计,可能不是问题。

另外两个选择:

  • 您可以将它们存储在文件系统中并使用应用程序页面提供它们,以便它可以例如在获取图像并将其发送到客户端之前检查访问控制。

  • 如果您的网络服务器支持它们在文件系统上提供文件,您可以使用X-SendFile:标头 - 应用程序页面告诉Web服务器要提取的文件,网络服务器将获取文件并发送它。如果您使用例如应用程序和图像文件可能存在于不同的计算机上FastCGI,图像永远不会通过FastCGI连接发送。

您可能还需要考虑缓存 - 如果您编写任何编程方式来发送文件,则需要添加其他逻辑,以便浏览器可以缓存图像,或者您最终会提供服务反复拍摄图像并增加带宽成本。

答案 1 :(得分:1)

有一个权衡 - 这将取决于您的确切情况和需求。每个的好处包括

文件系统

  • 性能,尤其是缓存和I / O

数据库

  • 更容易扩展到多个Web服务器
  • 更易于管理(备份,安全等)

我猜你正在使用MySQL,但是如果你有一个SQL 2008数据库,那么看看FileStream in this SO文章 - 这可以提供两全其美的效果。

答案 2 :(得分:0)

我绝对只能在数据库中存储图像路径。存储图像数据会降低网站速度,给系统带来额外的压力。

如果您计划移动网站,我可以想象在数据库中存储图像数据的唯一优势就是。那你就不用担心文件路径等了。