php中读写文件与读写数据库的效率比较分享
这个问题也是最近才想到的,就是到底读文件更快还是读数据库更快,能快多少,天缘也搜索过,没见有网友就这个问题答复过,也可能是太简单的缘故,我们本文还是来实测一下,由于时间关系,VC还没装,天缘先用PHP测试了一下,下次有时间在C/C++上补充测试到本文来,因为PHP的底层解析应该也是基于C的,所以估计两者环境测试结果差不多,小问题大收获,现在就来看一下测试过程及结果。 测试程序如下: 说明1:由于读数据库语句调用简单的封包函数两次,所以把读文件也改成连续调用两次,数据库记录ID为1就在第一条,并且唯一索引。 代码如下: set_time_limit(0);
function fnGet($filename) { $content = file_get_contents($filename); return $content; } function fnGetContent($filename) { $content = fnGet($filename); return $content; } $times=100000; echo '数据库查询结果: '; //--------------------------------- $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.' 次时间:'.(fnGetMicroTime()-$begin).'秒 '; //--------------------------------- $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.' 次时间:'.(fnGetMicroTime()-$begin).'秒 '; //--------------------------------- $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.' 次时间:'.(fnGetMicroTime()-$begin).'秒 '; //--------------------------------- $dbcon->mydb_free_results(); $dbcon->mydb_disconnect(); fnWriteCache('test.txt',$content); echo '直接读文件测试结果: '; //--------------------------------- $begin=fnGetMicroTime(); for($i=0;$i<$times;$i++) { $content = fnGetContent('test.txt'); } echo 'file_get_contents直接读'.$times.'次时间:'.(fnGetMicroTime()-$begin).'秒 '; //--------------------------------- $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.'次时间:'.(fnGetMicroTime()-$begin).'秒 '; 4K大小数据的查询结果: 测试结论: 1、直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |