突然想到一个奇怪的问题,想和大家讨论一下。
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个不同的文件夹,然后将文件夹名列为数组。)
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个不同的文件夹,然后将文件夹名列为数组。)
一种还是用数字分文件夹,只是先将数据的记录位置保存到一些JSON文档里,先搜索json文件,确定文件在哪个文件夹里,然后在搜索那个文件夹,打开文件;一种按字母分文件夹,文件按首字母归类(或首2个字母),explore文件名,搜索指定的文件夹,打开文件。
2种方法都不需要遍历所有的100W文件,没测试过,估计速度应该不超过1秒。这种简陋的方法,把数据全都用json方式 记录到txt文档,可以在某些领域,替代MYSQL了吧,尤其是用在某些不带数据库的虚拟服务器上。
是完整路径+文件名。
有一点想搞明白,如果遍历100W个文件,速度是像MYSQL一样,很快?还是像WINDOWS自带的文件查询一样,很慢?
linux下是直接调用C标准库的access函数,原型大概是
access(char *pathname,int mode/*0-是否存在,2-写,4-读,6-执行*/)
win32下会调用tsrm_win32_access,过程会复杂些.