避免使用数据库表来跟踪图像

时间:2013-08-08 18:07:18

标签: php image file

对于社交网站,每个用户都会有一个相册。我意识到我并不真的需要一个数据库用于图像,它们可以简单地组织在文件夹中,因此可以做一些像(伪代码)的事情:

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

我读过的其他文章说文件操作如file_exists()非常快,所以没有必要担心它们,this article说你可以很快地扫描文件夹。

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

我只是有点好奇,因为我总是在数据库表中组织图像文件,如果从使用数据库表,性能方面或其他方面有任何巨大的缺点?

1 个答案:

答案 0 :(得分:1)

与其他磁盘I / O操作相比,

file_exists()只是“快速”,并且只在小目录上“快速”。如果您碰巧开始接近任何给定目录中的1000项标记,您会发现“快速”变得“非常缓慢”。

同样,使用基于文件/文件夹的操作会完全抛出窗口的并行性,因为只有一个读/写头可以找到这些文件,服务器需要做的任何事情都是在扫描目录时保持不变,或者在完成后暂停您的操作。

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

使用数据库,您将获得并行性,索引和缓存的好处,只要您的架构和索引策略合理,所有这些都可以轻松扩展应用程序中的活动级别。