【问题标题】:Refrain from using database tables to keep track of images避免使用数据库表来跟踪图像
【发布时间】:2013-08-08 18:07:17
【问题描述】:

对于社交网站,每个用户都将拥有一个相册。我意识到我并不真的需要图像数据库,它们可以简单地组织在文件夹中,所以可以执行类似(伪代码)的操作:

$photos = files("albums/$user_id/*")
foreach($photos as $photo)
  img($photo);

我读过的其他文章说像 file_exists() 这样的文件操作非常快,所以不必担心它们,this article 说您可以非常快速地扫描文件夹。

我不需要任何元数据或其他数据来随附图像,因此数据库的唯一用途是告诉我用户拥有哪些图像,但我可以通过以下方式获取该信息 阅读目录,我只需要在每页加载时显示一张专辑。我也不需要对图像进行任何类型的数据库查询。

我只是有点好奇,因为我一直在数据库表中组织图像文件,如果不使用数据库表有什么巨大的缺点,无论是性能方面还是其他方面?

【问题讨论】:

    标签: php image file


    【解决方案1】:

    file_exists() 与其他磁盘 I/O 操作相比仅“快速”,并且仅在小目录上“快速”。如果您碰巧开始接近任何给定目录中的 1000 项标记,您会发现“快”变成“非常慢”。

    同样,使用基于文件/文件夹的操作完全抛弃了并行性,因为只有一个读/写头来查找这些文件,而服务器需要做的任何其他事情要么在您扫描目录时暂停,或在操作完成时暂停操作。

    所以是的,技术上只使用文件/文件夹可能与使用数据库一样快,只要它只是少数在任何给定时间不是特别繁忙的服务器上拥有少数个文件的用户。

    使用数据库,您将受益于并行性、索引和缓存,只要您的架构和索引策略合理,所有这些都将随着应用程序中的活动级别轻松扩展。

    【讨论】:

      猜你喜欢
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2017-08-03
      • 2015-11-14
      相关资源
      最近更新 更多