使用 Web 浏览器,我需要访问 Linux 服务器上一个包含大约 200,000 个文件的目录。
我正在使用 apache 中的“Alias”指令来实现此要求。请参见下文 -
Alias /barcodes/ "/m01/apps/codes/barcodes/"
<Directory "/m01/apps/codes/barcodes/">
Options +Indexes
IndexOptions +TrackModified
AllowOverride None
Order allow,deny
Allow from all
#Doing IndexOrderDefault so to see the files in a descending order (by date/timestamp)
IndexOrderDefault Descending Date
</Directory>
问题 - Web 浏览器需要花费大量时间显示目录中的文件,因此访问速度太慢。
如果有人能帮助实现这一要求我将不胜感激。
谢谢..
答案1
作为 @斯文指出,这无法通过您当前的设置实现。
目前,存在许多可能的瓶颈,但很可能是磁盘本身。
对于索引页的每个请求:
- apache 需要查询磁盘以获取文件夹的内容
- 然后 Apache 需要查询磁盘以获取每个条目的详细信息
- 这会导致操作系统查找 UID/GID 等操作,以便尝试提供文本而不是数字值
根据您的实际需要,一种可能的解决方案是通过编程创建您自己的索引文件,并避免每次扫描整个目录。
类似于这个丑陋的和未经测试的“脚本”:
#!/bin/bash
DATE="$( date -I )"
echo "<html><head><title>File listing at $DATE <title></head>" > index.html
echo "<body><ul>" >> index.html
for x in `ls -1 FOLDER`; do
echo "<li><a href=\"/path/to/$x\">$x<a></li>" >> index.html
done
echo "</ul></body></html" >> index.html
然后,用户可以从列表中选择一个文件(由 apache 和磁盘读取的一个文件),并根据需要访问该内容。
显然,您可能想要一些比这更好的东西,但希望尽可能减少每个请求的读取次数的总体思路是明确的。