ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでのファイルの読み取りと書き込みおよびデータベースの読み取りと書き込みの効率

PHP_PHP チュートリアルでのファイルの読み取りと書き込みおよびデータベースの読み取りと書き込みの効率

WBOY
WBOYオリジナル
2016-07-20 11:11:50824ブラウズ

この記事では、PHP でのファイルの読み書きとデータベースの読み書きの効率の比較を紹介します。詳しく知りたい人は参考にしてください。

テストプログラムは以下のとおりです。

//説明1: データベース読み取りステートメントはシンプルパケット関数を2回呼び出しているため、読み取りファイルも2回連続の呼び出しに変更されます。これは最初の呼び出しです。 、一意のインデックスを持ちます。

コードは次のとおりです コードをコピーします

///命令 2: 4K データで 1 回、再形成されたデータで 1 回の計 2 回テストします

set_time_limit(0);

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

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

$回=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{
$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 '。回。' 回: '.(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 )) {F $ fp = FOPEN ($ FNAME, "R"); // FLOCK ($ FP, LOCK_EX); $ File_data = FREAD ($ FP, Filesize ($ Fname)); ).'秒
';



4Kサイズデータのクエリ結果:

fetch_row 100000回: 16.737720012665秒

fetch_array 100000回: 16.661195993423秒

fetch_object 100000回: 16 .77506589 8895 秒

ファイルの直接読み取りテスト結果:

file_get_contents の直接読み取り 100000 回時間: 5.4631857872009 秒

fopen 直接読み取り 100000 回 時間: 11.463611125946 秒

Shape ID クエリ結果:

fetch_row 100000 回 時間: 12.812072038651 秒

fetch_array 1 00000回 時間: 12.667390108109秒

fetch_object 100000回 時間: 12.988099098206秒

ファイル直接読み取りテスト結果:

file_get_contents 直接読み取り 100000 回 時間: 5.6616430282593 秒

fopen 直接読み取り 100000 回 時間: 11.542816877365 秒


テストの結論:

1. ファイルを直接読み取る データベースクエリより効率的 1この記事には接続時間と切断時間は含まれていません。

2. 一度に読み取られるコンテンツが大きいほど、ファイルを直接読み取ることの利点はより明らかです (ファイルの読み取りにかかる時間はわずかに増加します。これは、ファイル ストレージの継続性とクラスター サイズに関係します)。 Tianyuan と同じ 逆のことが予想されます。これは、MYSQL に大きなファイルを読み取るための追加操作がある可能性があることを示しています (単純な代入変換であれば、時間は 2 回近く 30% 増加します)。

3. テストせずにファイルを書き込んだり INSERT したりすると、データベースの効率が悪化するだけであると推測できます。

4. 小さな設定ファイルがデータベース機能を使用する必要がない場合は、別のファイルに保存する方が適しています。大きなファイルを保存する方が便利です。ファイル内の写真や音楽などの場合は、パスやサムネイルなどのインデックス情報のみをデータベースに入れる方が合理的です。

5. PHP 上でファイルを読み込むだけであれば、fopen や fclose よりも file_get_contents の方が効率的であり、この関数の存在を判断する時間を除けば約 3 秒かかります。

6. fetch_row と fetch_object は fetch_array から変換する必要があります。Tianyuan は PHP のソース コードを見ていませんが、これはインターネットで言われていることに反するようです。 。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444607.html技術記事この記事では、PHP でのファイルの読み書きとデータベースの読み書きの効率の比較を紹介します。詳しく知りたい人は参考にしてください。 テストプログラムは次のとおりです: //注 1: データベースを読み取る言語のせいで...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。