file_exists 的查找速度。

去圣西罗-为尤文喝彩 2011-07-18 02:09:08
突然想到一个奇怪的问题,想和大家讨论一下。
file_exists 的查找速度如何?

下面是我测试搜索temp临时文件夹1103个文件

<?php
$mtime = explode(" ",microtime());
$starttime = $mtime[1] + $mtime[0];
$filename = 'Temp/_723415456_.png';
if (file_exists($filename)) {
echo "exists"; // exists
} else {
echo "not exist";
}
echo '<br />'.memory_get_usage().'<br />'; // 108912b 内存
$mtime = explode(" ",microtime());
$endtime = $mtime[1] + $mtime[0];
$totaltime = ($endtime - $starttime);
echo "load ".$totaltime." s"; // 0.000925064086914 s
?>


光测试1000个文件,查询速度非常快。

但是如果有100W个文件呢?查询速度会不会变慢,内存占有率会不会变大?
(100W个文件可以分配到100个不同的文件夹,然后将文件夹名列为数组。)
...全文
312 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vophum 2011-07-20
  • 打赏
  • 举报
回复
你写个测试帖让大家看看结果嘛
这多好啊 写出来肯定是精华贴了
ImN1 2011-07-20
  • 打赏
  • 举报
回复
如果是完整的路径+文件名,决定效率应该不在php而在系统

如果是模糊查询那就麻烦了……呵呵
  • 打赏
  • 举报
回复
高人终于浮现了,linux应该比WIN更有优势。
foolbirdflyfirst 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 phpnewnew 的回复:]

PHP最后是不是调用系统API来操作查询的?这个有高人出来描述一下 或者看看源码,我觉得应该是的,所以跟WIN应该是一样
[/Quote]
肯定的.
linux下是直接调用C标准库的access函数,原型大概是
access(char *pathname,int mode/*0-是否存在,2-写,4-读,6-执行*/)

win32下会调用tsrm_win32_access,过程会复杂些.
黄袍披身 2011-07-20
  • 打赏
  • 举报
回复
PHP最后是不是调用系统API来操作查询的?这个有高人出来描述一下 或者看看源码,我觉得应该是的,所以跟WIN应该是一样
ImN1 2011-07-20
  • 打赏
  • 举报
回复
遍历??
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 snmr_com 的回复:]
如果是完整的路径+文件名,决定效率应该不在php而在系统

如果是模糊查询那就麻烦了……呵呵
[/Quote]

是完整路径+文件名。
有一点想搞明白,如果遍历100W个文件,速度是像MYSQL一样,很快?还是像WINDOWS自带的文件查询一样,很慢?
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 piger920 的回复:]
你写个测试帖让大家看看结果嘛
这多好啊 写出来肯定是精华贴了
[/Quote]
我笔头不好,这个就算了。

[Quote=引用 3 楼 piger920 的回复:]
楼主你要清楚既然是分文件夹了,那么一般都是在查询文件之前就已经确定要查哪个文件夹了
[/Quote]
的确,现在有2种思路。
一种还是用数字分文件夹,只是先将数据的记录位置保存到一些JSON文档里,先搜索json文件,确定文件在哪个文件夹里,然后在搜索那个文件夹,打开文件;

一种按字母分文件夹,文件按首字母归类(或首2个字母),explore文件名,搜索指定的文件夹,打开文件。
2种方法都不需要遍历所有的100W文件,没测试过,估计速度应该不超过1秒。

这种简陋的方法,把数据全都用json方式 记录到txt文档,可以在某些领域,替代MYSQL了吧,尤其是用在某些不带数据库的虚拟服务器上。
kyzy_yy_pm 2011-07-18
  • 打赏
  • 举报
回复
楼主你要清楚既然是分文件夹了,那么一般都是在查询文件之前就已经确定要查哪个文件夹了,而不是一下查100w个,要是那样啥服务器也解决不了,楼主也可以试一试is_file来比一比速度看看那个方法较快,不过貌似以前有个帖子说是is_file较快,不过没试过
PIGer920 2011-07-18
  • 打赏
  • 举报
回复
你写个测试帖让大家看看结果嘛
这多好啊 写出来肯定是精华贴了
  • 打赏
  • 举报
回复
文件目录深度就2级,temp/(数字1-100),仅仅判断文件是否存。

理论上速度应该不慢的吧~?
黄袍披身 2011-07-18
  • 打赏
  • 举报
回复
快慢应该和文件目录深度/文件名复杂度/磁盘物理速度/磁盘索引文件 有关.仅仅判断文件是否存在速度肯定很快. 100W个文件当然会慢了.内存占有应该差不多吧.

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧