ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHP チュートリアルにおけるファイルの読み書きとデータベースの読み書きの効率の比較と共有

PHP_PHP チュートリアルにおけるファイルの読み書きとデータベースの読み書きの効率の比較と共有

WBOY
リリース: 2016-07-13 10:25:57
オリジナル
878 人が閲覧しました

この質問も最近頭に浮かびました。ファイルやデータベースの読み取りはどれくらい速いですか? Tianyuan も検索しましたが、この質問に答えた人はいませんでした。この記事は実際の内容に関するものである可能性があります。時間の都合上、Tianyuan はまだ PHP でテストを行っていません。次回時間があれば、この記事に C/C++ のテストを補足します。PHP の基礎となる分析も行う必要があります。したがって、この 2 つの環境テストの結果は類似していると推定されます。次に、テストのプロセスと結果を見てみましょう。

テスト手順は次のとおりです:

注 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;
}
$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.'Time:'.(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.77506589889 5 秒
ファイルを直接読み取る テスト結果:
file_get_contents を直接読み取る 100000 回 時間: 5.4631857872009 秒
fopen 直接読み取り時間: 11.463611125946 秒
Shape ID クエリ結果:
fetch_row 100000 回 時間: 12.812072038651 秒
fetch_array 100000 回 時間: 12.667390108109 秒
fetch_object 100000時間 時間: 12.988099098206 秒
ファイルを直接読み取る テスト結果:
file_get_contents を直接読み取る 時間100,000 回: 5.6616430282593 秒
fopen の直接読み取り 100,000 回: 11.542816877365 秒

テストの結論:

1. ファイルを直接読み取る方がデータベースクエリよりも効率的であり、接続時間と切断時間は記事に含まれていません。
2. 一度に読み取られるコンテンツが大きいほど、ファイルを直接読み取ることの利点はより明らかです (ファイルの読み取りにかかる時間はわずかに増加しますが、これはファイル ストレージの継続性とクラスター サイズに関係します)。この結果はまさに Tianyuan と同じです。逆に、MYSQL には大きなファイルを読み取るための追加の操作がある可能性があることを示しています (単純な代入変換だけであれば、時間は 30% 近く増加しています)。
3. ファイルの書き込みや INSERT 時にテストを行わないと、データベースの効率は悪化するだけであると推測できます。
4. 小さな構成ファイルがデータベース機能を使用する必要がない場合は、アクセス用に別のファイルに保存する方が適しています。別のデータ テーブルやレコードを作成する必要がなく、保存する方が便利です。ファイル内の画像や音楽などの大きなファイルの場合は、パスやサムネイルなどのインデックス情報のみをデータベースに入れる方が合理的です。
5. PHP でファイルを読み込むだけであれば、fopen や fclose よりも file_get_contents の方が効率的で、この関数の存在を判断する時間を除けば約 3 秒かかります。
6. fetch_row と fetch_object は fetch_array から変換する必要があります。私は PHP のソース コードを見ていませんが、これはインターネットで言われていることに反するようです。
実際、このテストを行う前に、私は個人的な経験に基づいて結果を大まかに把握していました。テストが完了した後、私は啓発された感覚を感じました。プログラムの効率が主要なプロセスの効率と同等であり、キャッシュなどの手段が含まれていないと仮定すると、MSYQL プロセスに関係なく、どの種類のデータの読み書きもファイルを直接操作するほど高速ではありません。 (レコード ストアは同等です)、もちろん、これらすべての前提として、コンテンツは読み取り専用であり、並べ替えや検索操作とは何の関係もありません。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/824895.html技術記事この質問は最近思い浮かんだものです。ファイルやデータベースの読み取りはどれくらい速くなりますか? Tianyuan も検索しましたが、この質問に答えた人はいないかもしれません...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート