1

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

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

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

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

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

4

1 回答 1

1

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

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

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

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

于 2013-08-08T18:25:19.800 回答