新葡亰496net 新葡亰编程 php中读写文件与读写数据库的频率相比较共享_php才干_脚本之家

php中读写文件与读写数据库的频率相比较共享_php才干_脚本之家

这一个难点也是这几天才想到的,正是到底读文件更快照旧读数据库越来越快,能快多少,天缘也招来过,没见有网络好朋友就这一个难题答疑过,也可能是太不难的原由,大家本文仍旧来实地衡量一下,由于时间关系,VC尚未装,天缘先用PHP测量检验了瞬间,后一次一时间在C/C++上补偿测量试验到本文来,因为PHP的尾巴部分深入分析应该也是基于C的,所以估摸双方遇到测验结果基本上,没格外大收获,以后就来看一下测量试验进度及结果。

测量试验程序如下:

测量检验程序如下:

//说明1:由于读数据库说话调用轻便的封包函数若干遍,所以把读文件也改成接二连三调用五次,数据库记录ID为1就在首先条,何况独一索引。

表明1:由于读数据库语句调用轻巧的封包函数一次,所以把读文件也改成一连调用五回,数据库记录ID为1就在率先条,何况唯一索引。表明2:测量检验四回二回是4K数目,一遍是整形数据

 代码如下

复制代码
代码如下:set_time_limit;function fnGet{$content =
file_get_contents;return $content;}function fnGetContent{$content =
fnGet;return $content;}$times=100000;echo ‘数据库查询结果:
‘;//———————————$begin=fnGetMicroTime();for{$res=$dbcon->mydb_query(“SELECT
log_Content FROM blog WHERE
log_ID=’1′”);$row=$dbcon->mydb_fetch_row;$content=$row[0];}echo
‘fetch_row ‘.$times.’ 次时间:’.-$begin).’秒
‘;//———————————$begin=fnGetMicroTime();for{$res=$dbcon->mydb_query(“SELECT
log_Content FROM blog WHERE
log_ID=’1′”);$row=$dbcon->mydb_fetch_array;$content=$row[‘log_Content’];}echo
‘fetch_array ‘.$times.’ 次时间:’.-$begin).’秒
‘;//———————————$begin=fnGetMicroTime();for{$res=$dbcon->mydb_query(“SELECT
log_Content FROM blog WHERE
log_ID=’1′”);$row=$dbcon->mydb_fetch_object;$content=$row->log_Content;}echo
‘fetch_object ‘.$times.’ 次时间:’.-$begin).’秒
‘;//———————————$dbcon->mydb_free_results();$dbcon->mydb_disconnect(卡塔尔(قطر‎;fnWriteCache;echo
‘直接读文件测量检验结果:
‘;//———————————$begin=fnGetMicroTime();for{$content
= fnGetContent;}echo
‘file_get_contents直接读’.$times.’次时间:’.-$begin).’秒
‘;//———————————$begin=fnGetMicroTime();for{$fname
= ‘test.txt’;if{$fp=fopen;//flock;$file_data=fread);//rewind;}$content
= fnGetContent;}echo ‘fopen直接读’.$times.’次时间:’.-$begin).’秒
‘;

//表达2:测量试验一回叁遍是4K数量,一回是整形数据

4K大小数据的查询结果:fetch_row 100000
次时间:16.737720012665秒fetch_array 100000
次时间:16.661195993423秒fetch_object 100000
次时间:16.775065898895秒直接读文件测量试验结果:file_get_contents直接读100000次时间:5.463185787二零一零秒fopen直接读100000次时间:11.463611125946秒整形ID查询结果:fetch_row
100000 次时间:12.812072038651秒fetch_array 100000
次时间:12.667390108109秒fetch_object 100000
次时间:12.988099098206秒直接读文件测量检验结果:file_get_contents直接读100000次时间:5.6616430282593秒fopen直接读100000次时间:11.542816877365秒

set_time_limit(0);

测量检验结论:

function fnGet($filename)
{
    $content = file_get_contents($filename);
    return $content;
}

1、直接读文件相比较数据库查询效用更胜一筹,何况文中还未算上三回九转和断开的小时。2、一回读取的从头到尾的经过越大,直接读文件的优势会越精晓(读文件时间都以开间提升,那跟文件存储的一连性和簇大小等有关系),那一个结果恰好跟天缘预料的相反,表达MYSQL对更加大文件读取只怕又附加了一点操作,假若只是仅仅的赋值转变应该是异样偏小才对。3、写文件和INSERT大约不用测验就能够估计出,数据库效用只会更差。4、十分小的计划文件如若无需动用到数据库脾性,越发切合放置独立文件里存取,没有需求单独创制数据表或记录,十分的大的文件举个例子图片、音乐等应用文件存款和储蓄更为方便,只把门路或缩略图等索引消息放到数据Curry更客观一些。5、PHP上生龙活虎旦只是读文件,file_get_contents比fopen、fclose更有效用,不包罗决断存在此个函数时间会少3秒左右。6、fetch_row和fetch_object应该是从fetch_array转变而来的,小编没看过PHP的源码,单从实行上就可以印证fetch_array功用越来越高,那跟互连网的说法就像是反而。实际上在做那一个试验在此以前,从个人阅世判别就有了大概的结果,测量试验完了后则最先受到祸殃茅塞顿开的认为。假定在程序效能和第黄金时代进度极度且不计入缓存等艺术的基准下,读写任何项指标多寡都未有直接操作文件来的快,无论MSYQL进度怎么着,最终都要到磁盘上去读那一个“文件”,所以自然这一切的前提是只读内容,毫不相关任何排序或探究操作。

function fnGetContent($filename)
{
    $content = fnGet($filename);
    return $content;
}
   
$times=100000;   
echo ‘数据库查询结果:<br/>’;
//———————————
$begin=fnGetMicroTime();
for($i=0;$i<$times;$i++)
{
    $res=$dbcon->mydb_query(“SELECT log_Content FROM blog WHERE
log_ID=’1′”);
    $row=$dbcon->mydb_fetch_row($res);
    $content=$row[0];
}
echo ‘fetch_row ‘.$times.’ 次时间:<font
color=red>’.(fnGetMicroTime()-$begin).'</font>秒<br/>’;
//———————————

$begin=fnGetMicroTime();
for($i=0;$i<$times;$i++)
{
    $res=$dbcon->mydb_query(“SELECT log_Content FROM blog WHERE
log_ID=’1′”);
    $row=$dbcon->mydb_fetch_array($res);
    $content=$row[‘log_Content’];   
}
echo ‘fetch_array ‘.$times.’ 次时间:<font
color=red>’.(fnGetMicroTime()-$begin).'</font>秒<br/>’;
//———————————

$begin=fnGetMicroTime();
for($i=0;$i<$times;$i++)
{
    $res=$dbcon->mydb_query(“SELECT log_Content FROM blog WHERE
log_ID=’1′”);
    $row=$dbcon->mydb_fetch_object($res);
    $content=$row->log_Content;   
}
echo ‘fetch_object ‘.$times.’ 次时间:<font
color=red>’.(fnGetMicroTime()-$begin).'</font>秒<br/>’;
//———————————

$dbcon->mydb_free_results();
$dbcon->mydb_disconnect();

fnWriteCache(‘test.txt’,$content);

echo ‘直接读文件测量检验结果:<br/>’;

//———————————
$begin=fnGetMicroTime();
for($i=0;$i<$times;$i++)
{
    $content = fnGetContent(‘test.txt’);
}
echo ‘file_get_contents直接读’.$times.’次时间:<font
color=red>’.(fnGetMicroTime()-$begin).'</font>秒<br/>’;
//———————————

$begin=fnGetMicroTime();
for($i=0;$i<$times;$i++)
{
    $fname = ‘test.txt’;
    if(file_exists($fname))
     {
       
$fp=fopen($fname,”r”);//flock($fp,LOCK_EX);       
        $file_data=fread($fp, filesize($fname));//rewind($fp);      
        fclose($fp);
    }
    $content = fnGetContent(‘test.txt’);
}   
echo ‘fopen直接读’.$times.’次时间:<font
color=red>’.(fnGetMicroTime()-$begin).'</font>秒<br/>’;

4K大小数据的询问结果:

fetch_row 100000 次时间:16.737720012665秒

fetch_array 100000 次时间:16.661195993423秒

标签:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图