商用データベースに匹敵するWebシステム構築手法 7

クエリキャッシュとキャッシュの効果

クエリキャッシュ   ページ全体やページの一部をキャッシュすることが適切でない場合もあります。このような場合も、クエリをキャッシュすることによりパフォーマンスを 大幅に向上することが可能です。ここでもSquidを使用すると、高性能なクエリキャッシュシステムを簡単に構築できます(図21)。キャッシュ

大垣 靖男

2005年5月11日 20:00

クエリキャッシュ

   ページ全体やページの一部をキャッシュすることが適切でない場合もあります。このような場合も、クエリをキャッシュすることによりパフォーマンスを 大幅に向上することが可能です。ここでもSquidを使用すると、高性能なクエリキャッシュシステムを簡単に構築できます(図21)。キャッシュヒット率 が高いデータをキャッシュさせると、高い効果が期待できます。


クエリキャッシュ
図21:クエリキャッシュ
 

   PHPについては、リモートファイルの読み込みをサポートしているため、リスト9、リスト10のようなスクリプトを用意します。

リスト9:サーバー側PHPスクリプトの例(出力はSquidにキャッシュ)

// query_result.php
// 600秒間キャッシュを許可
header('Cache-Control: public, max-age=600');
$db = pg_connect('dbname=foo');
$rec = pg_select($db, 'somedb', $_GET);
// PHPがスクリプトとして読み込み可能な
// 形式でレコード変数を出力
echo ' var_export($rec);
echo '?>';
?>

リスト10:クライアント側PHPスクリプトの例

include(‘http://some_db_cache _server/query_result.php?id=1234');
var_dump($rec); // query_ result.phpで設定された変数をダンプ
?>

 

キャッシュの効果

   これまで紹介してきたキャッシュがどの程度の効果があるか、簡単なベンチマークを行ってみます。テストに利用したのは次のスペックのPCです。データベースサーバー、Webサーバー、キャッシュサーバー、クライアントとして使用しました。


  • 環境 … PC3台
  • CPU … Pentium 4 2.4GHz
  • メモリ … 1GB
  • HDD … UATA 133/7200rpm
  • NIC … 100Mbps(スイッチングHUBへ接続)

   データベースのデータには、日本郵政公社が公開している郵便番号情報(http://www.post.japanpost.jp/zipcode/download.html)を、PostgreSQLに登録して使用しました。データ件数は約12万件あります。

   テストには、自作したPHPスクリプトおよびab(Apache Bench)コマンドを使用しました。abコマンドを使用したテストでは、コマンドは外部の別のPCから実行し、「ab -c 100 -n 10000 」として、同時接続100で10000リクエストを送信しました。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る