php中读写文件与读写数据库的效率比较分享
一直以来大家都把一些不经常修改的数据保存为文件来调用,看来还是比较正确的,直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间
这个问题也是最近才想到的,就是到底读文件更快还是读数据库更快,能快多少,天缘也搜索过,没见有网友就这个问题答复过,也可能是太简单的缘故,我们本文还是来实测一下,由于时间关系,VC还没装,天缘先用PHP测试了一下,,下次有时间在C/C++上补充测试到本文来,因为PHP的底层解析应该也是基于C的,所以估计两者环境测试结果差不多,小问题大收获,现在就来看一下测试过程及结果。
测试程序如下:
说明1:由于读数据库语句调用简单的封包函数两次,所以把读文件也改成连续调用两次,数据库记录ID为1就在第一条,并且唯一索引。
说明2:测试两次一次是4K数据,一次是整形数据
复制代码 代码如下:
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{
$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{
$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{
$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{
$content = fnGetContent('test.txt');
}
echo 'file_get_contents直接读'.$times.'次时间:'.(fnGetMicroTime()-$begin).'秒
';
//---------------------------------
$begin=fnGetMicroTime();
for($i=0;$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大小数据的查询结果:
fetch_row 100000 次时间:16.737720012665秒
fetch_array 100000 次时间:16.661195993423秒
fetch_object 100000 次时间:16.775065898895秒
直接读文件测试结果:
file_get_contents直接读100000次时间:5.4631857872009秒
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秒
测试结论:
1、直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间。
2、一次读取的内容越大,直接读文件的优势会越明显(读文件时间都是小幅增长,这跟文件存储的连续性和簇大小等有关系),这个结果恰恰跟天缘预料的相反,说明MYSQL对更大文件读取可能又附加了某些操作(两次时间增长了近30%),如果只是单纯的赋值转换应该是差异偏小才对。
3、写文件和INSERT几乎不用测试就可以推测出,数据库效率只会更差。
4、很小的配置文件如果不需要使用到数据库特性,更加适合放到独立文件里存取,无需单独创建数据表或记录,很大的文件比如图片、音乐等采用文件存储更为方便,只把路径或缩略图等索引信息放到数据库里更合理一些。
5、PHP上如果只是读文件,file_get_contents比fopen、fclose更有效率,不包括判断存在这个函数时间会少3秒左右。
6、fetch_row和fetch_object应该是从fetch_array转换而来的,我没看过PHP的源码,单从执行上就可以说明fetch_array效率更高,这跟网上的说法似乎相反。
实际上在做这个试验之前,从个人经验判断就有了大概的结果,测试完成后则有种豁然开朗的感觉。假定在程序效率和关键过程相当且不计入缓存等措施的条件下,读写任何类型的数据都没有直接操作文件来的快,不论MSYQL过程如何,最后都要到磁盘上去读这个“文件”(记录存储区等效),所以当然这一切的前提是只读内容,无关任何排序或查找操作。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Windows 11 22H2의 새로운 작업 관리자는 고급 사용자에게 도움이 됩니다. 이제 실행 중인 프로세스, 작업, 서비스 및 하드웨어 구성 요소를 감시할 수 있는 추가 데이터를 통해 더 나은 UI 환경을 제공합니다. 새로운 작업 관리자를 사용해 왔다면 새로운 생산성 모드를 발견했을 것입니다. 그것은 무엇입니까? Windows 11 시스템의 성능을 향상시키는 데 도움이 됩니까? 알아 보자! Windows 11의 생산성 모드란 무엇입니까? 생산성 모드는 작업 관리자의 작업 중 하나입니다.

DeepMind의 AI 에이전트가 다시 작동합니다! 주목하세요, BBF라는 이 남자는 단 2시간 만에 26개의 Atari 게임을 마스터했습니다. 그의 효율성은 그의 전임자들을 모두 능가하는 인간의 효율성과 동일합니다. 아시다시피 AI 에이전트는 항상 강화학습을 통해 문제를 해결하는 데 효과적이었지만, 가장 큰 문제는 이 방법이 매우 비효율적이고 탐색하는 데 오랜 시간이 걸린다는 것입니다. Picture BBF가 가져온 혁신은 효율성 측면에서 이루어졌습니다. 전체 이름이 Bigger, Better 또는 Faster로 불릴 수 있다는 것은 놀라운 일이 아닙니다. 더욱이, 단 하나의 카드로 훈련을 완료할 수 있으며 컴퓨팅 성능 요구 사항도 훨씬 줄어듭니다. BBF는 Google DeepMind와 몬트리올 대학이 공동으로 제안했으며, 데이터와 코드는 현재 오픈 소스입니다. 도달할 수 있는 가장 높은 인간

PyCharm은 Python 개발자가 코드 작성, 디버깅 및 프로젝트 관리를 위해 널리 사용하는 강력한 Python 통합 개발 환경(IDE)입니다. 실제 개발 과정에서 대부분의 개발자는 개발 효율성을 높이는 방법, 개발 시 팀 구성원과 협력하는 방법 등과 같은 다양한 문제에 직면하게 됩니다. 이 기사에서는 개발자가 원격 개발에 PyCharm을 더 잘 활용하고 작업 효율성을 향상할 수 있도록 PyCharm 원격 개발에 대한 실용적인 가이드를 소개합니다. 1. PyCh에서의 준비 작업

StableDiffusion은 오픈소스 딥러닝 모델로, 텍스트 설명을 통해 고품질 이미지를 생성하는 것이 주요 기능이며, 그래프 생성, 모델 병합, 모델 훈련 등의 기능을 지원합니다. 모델의 작동 인터페이스는 아래 그림에서 볼 수 있습니다. 그림 생성 방법 다음은 사슴이 물을 마시는 그림을 만드는 과정을 소개합니다. 그림을 생성할 때 프롬프트 단어와 부정적인 프롬프트 단어로 나누어서 입력해야 합니다. 원하는 장면, 대상, 스타일, 색상을 자세히 설명해보세요. 예를 들어, 단순히 "사슴이 물을 마신다"라고 말하는 대신 "개울, 울창한 나무 옆, 그리고 개울 옆에 사슴이 물을 마시고 있다"라고 말합니다. 예를 들어, 부정 프롬프트 단어는 반대 방향입니다. 건물도 없고, 사람도 없고, 다리도 없고, 울타리도 없고, 너무 모호한 설명은 부정확한 결과를 초래할 수 있습니다.

Edge와 같은 Chromium 기반 브라우저는 많은 리소스를 사용하지만 Microsoft Edge에서 효율성 모드를 활성화하여 성능을 향상시킬 수 있습니다. Microsoft Edge 웹 브라우저는 처음부터 많은 발전을 이루었습니다. 최근 Microsoft는 PC에서 브라우저의 전반적인 성능을 향상시키기 위해 브라우저에 새로운 효율성 모드를 추가했습니다. 효율성 모드는 배터리 수명을 연장하고 시스템 리소스 사용량을 줄이는 데 도움이 됩니다. 예를 들어, Google Chrome 및 Microsoft Edge와 같이 Chromium으로 구축된 브라우저는 RAM 및 CPU 주기를 많이 잡아먹는 것으로 악명이 높습니다. 그러므로 순서대로

인터넷의 급속한 발전과 함께 데이터베이스의 중요성은 더욱 부각되고 있습니다. Java 개발자로서 우리는 데이터베이스 작업을 수행하는 경우가 많습니다. 데이터베이스 트랜잭션 처리의 효율성은 전체 시스템의 성능 및 안정성과 직접적인 관련이 있습니다. 이 기사에서는 개발자가 시스템 성능과 응답 속도를 향상시키는 데 도움이 되도록 데이터베이스 트랜잭션 처리 효율성을 최적화하기 위해 Java 개발에서 일반적으로 사용되는 몇 가지 기술을 소개합니다. 일괄 삽입/업데이트 작업 일반적으로 단일 레코드를 한 번에 데이터베이스에 삽입하거나 업데이트하는 효율성은 일괄 작업보다 훨씬 낮습니다. 따라서 일괄 삽입/업데이트를 수행할 때

제목: 삶을 더욱 편리하게 만드는 Python: 업무 효율성과 삶의 질을 향상하려면 이 언어를 마스터하세요. 강력하고 배우기 쉬운 프로그래밍 언어인 Python은 오늘날 디지털 시대에 점점 더 인기를 끌고 있습니다. 프로그램을 작성하고 데이터 분석을 수행하는 것뿐만 아니라 Python은 일상 생활에서도 큰 역할을 할 수 있습니다. 이 언어를 익히면 업무 효율성이 향상될 뿐만 아니라 삶의 질도 향상됩니다. 이 기사에서는 특정 코드 예제를 사용하여 생활에서 Python을 광범위하게 적용하는 방법을 보여주고 독자에게 도움을 줄 것입니다.

sessionStorage의 역할을 익히고 프런트엔드 개발 효율성을 높이려면 구체적인 코드 예제가 필요합니다. 인터넷의 급속한 발전과 함께 프런트엔드 개발 분야도 날이 갈수록 변화하고 있습니다. 프런트엔드 개발을 할 때, 우리는 종종 대량의 데이터를 처리하고 후속 사용을 위해 브라우저에 저장해야 합니다. SessionStorage는 임시 로컬 저장소 솔루션을 제공하고 개발 효율성을 향상시킬 수 있는 매우 중요한 프런트 엔드 개발 도구입니다. 이번 글에서는 sessionStorage의 역할을 소개하겠습니다.
