【发布时间】:2017-04-18 15:52:26
【问题描述】:
即使似乎存在一些重复的问题,我认为这个问题是独一无二的。我不是在问是否有任何限制,它只是关于 Apache 环境中的性能缺陷。或者一般的unix文件系统。
假设我从 Apache 服务器请求文件
http://example.com/media/example.jpg
同一个目录“media”中有多少文件有关系吗?
我问的原因是我的 PHP 应用程序动态生成图像。
创建后,它会将其放置在 PHP 脚本因 ModRewrite 而触发的相同位置。如果文件存在,Apache 将跳过整个 PHP 执行并直接提供静态图像。如果你想这样称呼它,某种网关缓存。
Apache 基本上有两件事要做:
- 检查文件是否存在
- 提供文件或将请求转发给 PHP
到目前为止,我在这个单个目录中有大约 8 GB 的大约 25.000 个文件。我预计它在未来几年至少会增长 10 倍。
虽然我在管理这些文件时没有遇到任何问题,但我有一种轻微的感觉,即通过 HTTP 请求它们时它会变得越来越慢。所以我想知道这是否真的发生了,或者这只是我的主观印象。
【问题讨论】:
-
这取决于文件系统以及它如何在目录中搜索文件;如果它使用线性搜索,它会很慢,如果它被索引,文件的数量就不是问题了。它并不是真正特定于 Apache(或任何其他服务器)。对于 unix.SE 或 ServerFault.com,这可能是一个更好的问题。
-
好吧,是的,你是对的。基本上,搜索更大的文件集总是需要更长的时间。我想也许文件系统可以神奇地优化或缓存文件请求,从而使它们的实际层次结构过时。
-
事实上有一个目录缓存,所以它没有我建议的那么糟糕。但是将大目录加载到缓存中也很昂贵。
-
单个目录中有太多文件通常不是一个好主意。我可以建议您将它们分隔在子目录中吗?在生成文件名时,您还可以使用一些策略将文件放在从其名称推导出的目录中(如一些哈希函数)。