【问题标题】:Storing Images In Filesystem As Files Or In BLOB Database Field As Binaries [duplicate]将图像作为文件存储在文件系统中或作为二进制文件存储在 BLOB 数据库字段中[重复]
【发布时间】:2010-02-15 05:12:17
【问题描述】:

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

哪种方法更好?有什么优点和缺点?

在我看来,将图像存储在数据库中的优点是:

  • 数据库完整性(使用外键保持所有数据库条目的有效性比关注文件系统并在每次数据库更改期间在那里进行必要的更改更容易)
  • 工作量更少,维护更容易(您只需要处理一个数据存储位置 - 数据库)

缺点是:

  • 数据库服务器负载更大

你同意以上几点吗?

目前我所做的是将小图像(例如头像和缩略图)作为 BLOB 存储在数据库中,并将大图像(例如全尺寸照片或壁纸)存储在文件系统中。你认为这是一个好方法吗?如果是,是否有一些幻数(文件大小)决定将图像存储在数据库中是否仍然有利?如果不是,我应该将所有图像都存储在一个地方(数据库或文件系统)吗?

【问题讨论】:

  • 存储在数据库中使备份和恢复更容易,但会增加数据库使用的磁盘空间
  • 我会说将它们存储在数据库中可以使备份和恢复更容易,只需要很少的文件,但是一旦达到临界大小,备份和恢复就变成了一个主要的 pita ...

标签: mysql database image database-design


【解决方案1】:

我在尝试将图像存储在数据库中时遇到了重大性能问题。数据库大小变得更大,对带有 BLOB 的表的查询变得更慢。它还增加了代码的额外复杂性,因为您必须使用非标准数据访问来检索图像并且必须配置延迟加载。它还显着增加了备份和复制时间。

存储在文件中更容易处理,您可以轻松地仅备份和 rsync 已更改的文件。

基本上,我从不尝试将元数据以外的任何内容放入数据库中。

【讨论】:

  • 我认为使用数据库进行备份更容易,因为您只需要关心备份数据库,不需要备份文件系统。此外,关于复杂性的观点也不是很好,它与文件系统完全相同,您只需将正确的标题和 mime 类型发送到浏览器即可显示图像。最多只有一行代码。
  • 您不能对数据库中的 blob 进行增量备份,您可以对文件系统上的文件进行增量备份,即只备份已更改的文件。
  • @richard: 最多一行代码...这正是瓶颈所在,以 php 为例(但对于 ruby​​、java、perl 也一样)你需要 php 来连接数据库并发送标题,这意味着你很可能有一个巨大的 apache 进程。在文件系统中有文件可以让你使用例如。 lighttpd 用于此文件,它可以比客户端在数据库中更快地向客户端提供图像。
【解决方案2】:

恕我直言,二进制数据在数据库中没有位置。 (当然这条规则也有例外)

【讨论】:

  • 连头像或缩略图之类的小图片都没有?
猜你喜欢
  • 2014-04-30
  • 2011-05-31
  • 1970-01-01
  • 2012-06-26
  • 2012-11-04
  • 2014-05-04
  • 1970-01-01
  • 2021-05-31
  • 2011-10-19
相关资源
最近更新 更多