TOP書籍連動> データベースキャッシュ/データキャッシュの使用
Oracle&PHPでWeb構築
OracleとPHPでウェブサイトを構築する

第1回:親密になったOracleとPHPの関係

著者:Robert Mark   2006/2/9
前のページ  1  2   3  次のページ
データベースキャッシュ/データキャッシュの使用

   データのキャッシュはWebアプリケーションのパフォーマンスを向上させる最もよい方法の1つです。基本的には、よく使用される情報を見分けてアクセスしやすい場所に保存することによって、パフォーマンスを改善するテクニックが使用されます。

   一般的にはクエリもしくはデータセットがメモリへロードされることを意味しています。データベースからのデータを扱う最良の方法は、データベースアクセスが最小となるようにアプリケーションを設計することです。そうすることによってアプリケーションのパフォーマンスの低下の原因となるサーバの負荷を減らすことができます。

データベースキャッシュの動作図
図1:データベースキャッシュの動作図

   図1は、データベースのキャッシュがどのように動作しているかを示したものです。データセットがキャッシュされるように指定されている場合、データセットはメモリへロードされます。クエリがデータセットにアクセスする必要がある場合は、メモリから直接読み込みます。キャッシュが使用できない場合は、次にテーブルのインデックスを探索します。

   インデックスも使用できない場合はテーブルのデータにアクセスしなければなりません。もし要求されるデータが常に変化しているような場合は、そのデータを使用するすべてのページで毎回データベースからデータを取りだす必要があるでしょう。データベースの呼び出しが不必要となり、そのオーバーヘッドが単にデータセットをキャッシュすることで回避することができる、というような状況は多く存在します。

   もちろん、データベースマネジメントシステムのパフォーマンスはデータベース設計者、プログラマーや管理者の経験や能力に大きく依存します。オラクルは多くのリクエストを処理するのに優れていますが、データベースの設計が悪ければ元も子もありません。

   例のように、筆者が設計に関係しているいくつかのアプリケーションは、何十万行もある複数のテーブルにアクセスすることが必要です。正確なインデックスやデータキャッシングなしでは、データへアクセスし、その後そのデータをページへ表示するためのクエリはタイムアウトして処理を終えることができないでしょう。1つのWebページでも、そのような巨大なデータベースへの呼び出しが複数あることもあります。ポータルサイトを開発していた時に、ログイン後にユーザがカスタマイズすることが可能なページを作成したことがありました。

   そのためには、まず約50万行のテーブルからユーザ名とパスワードの組み合わせて検索を行う必要があります。正しくログインが行われると、ユニークなIDを取得することができます。次にユーザの設定のリストを違うテーブルから検索します。

   さらにユーザの設定に基づいて特定の学校に関するニュースや、大学のイベントなどを検索して表示するというものでした。すべてのクエリをストアドプロシージャにまとめて、そのプロシージャでユーザがカスタマイズしたページを表示するための複雑なSQLを使用するようにしました。データを取得する時間を短くするために、いくつかのクエリをキャッシュすることで、それらのデータについてはメモリ上に保存するようにしました。

   結果として、ページを表示するのにかかる時間は気にならない程度になりました。データのキャッシュによって、データベースのデータにアクセスするクエリの数を減らすことができます。これらの機能を使用するかどうかは、プロジェクトの要件などによって決められるでしょう。先ほども述べましたが、データの更新の頻度などを見積もらなければなりません。

前のページ  1  2   3  次のページ


Ilia Alshanetsky
著者プロフィール
Robert Mark
ケベックのモントリオールにあるMcGill大学に勤めており、シニアWebプログラマ/データベースプログラマ。主にOracleとPHPを使って、Webサイトを構築している。


INDEX
第1回:親密になったOracleとPHPの関係
  PHPとOracleの提携
データベースキャッシュ/データキャッシュの使用
  PDO vs OCI & ADODB