ホームページ  >  記事  >  バックエンド開発  >  データベース結果をキャッシュすることで PHP のパフォーマンスを向上させる_PHP チュートリアル

データベース結果をキャッシュすることで PHP のパフォーマンスを向上させる_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:33:19714ブラウズ

データベースクエリの結果をキャッシュすると、スクリプトの実行時間を大幅に短縮し、データベースサーバーの負荷を最小限に抑えることができることはよく知られています。この手法は、処理しているデータが基本的に静的である場合に非常にうまく機能します。これは、リモート データベースへの多くのデータ要求は最終的にローカル キャッシュから満たされるため、データベースに接続してクエリを実行し、結果を取得する必要がなくなるからです。

ただし、使用しているデータベースが Web サーバーとは別のマシン上にある場合は、データベースの結果セットをキャッシュすることをお勧めします。ただし、状況に応じて最適なキャッシュ戦略を決定するのは難しい場合があります。たとえば、最新のデータベース結果セットを使用することが重要なアプリケーションの場合、時間トリガーのキャッシュ手法 (有効期限のタイムスタンプに達するたびにキャッシュが再生成されることを前提とするキャッシュ システムで一般的に使用されます) は満足のいく解決策ではない可能性があります。 。この場合、アプリケーションがキャッシュに必要なデータベース データが変更されるたびにアプリケーションに通知し、キャッシュされた期限切れデータとデータベースの一貫性をアプリケーションが保つようにするメカニズムが必要です。このような場合には「データベース変更通知」を利用すると大変便利です。

データベース変更通知の入門

データベース変更通知機能の使用法は非常に簡単です。通知のために実行する通知ハンドラ、つまりPL/SQLストアド・プロシージャまたはクライアントOCIコールバック関数を作成します。次に、変更通知を受け取りたいデータベース オブジェクトに対するクエリを登録します。これにより、トランザクションがその中のオブジェクトを変更してコミットするたびに通知ハンドラーが呼び出されます。通常、通知ハンドラーは、クライアント アプリケーションが応答で適切なアクションを実行できるように、変更されたテーブルの名前、行われた変更の種類、およびオプションで変更された行の行 ID をクライアント リスナーに送信します。

データベース変更通知機能がどのように動作するかを理解するために、次の例を検討してください。 php(現在の主流の開発言語として)アプリケーションが、OE.ORDERSテーブルに保存されている注文とOE.ORDER_ITEMSに保存されている注文品目にアクセスするとします。発注された注文に関する情報がほとんど変更されないことを考慮すると、アプリケーションで ORDERS テーブルと ORDER_ITEMS テーブルの両方に対するクエリの結果セットをキャッシュすることができます。古いデータへのアクセスを回避するには、データベース変更通知を使用します。これにより、上記の 2 つのテーブルに格納されているデータの変更をアプリケーションに簡単に通知できます。

通知を受け取り、これら 2 つのテーブルに対して行われた DML または DDL 変更に応答するには、ORDERS テーブルと ORDER_ITEMS テーブルのクエリを登録する前に、まず CHANGE NOTIFICATION システム権限と EXECUTE ON DBMS_CHANGENOTIFICATION 権限を OE ユーザーに付与する必要があります。これを行うには、SQL*Plus などの SQL コマンド ライン ツールから次のコマンドを実行します。

CONNECT / AS SYSDBA;
GRANT CHANGE NOTIFICATION TO oe;
GRANT EXECUTE ON DBMS_CHANGE_NOTIFICATION TO oe; PL/SQL 通知を受信するには、init.ora パラメータ job_queue_processes がゼロ以外の値に設定されていることを確認してください。あるいは、次の ALTER SYSTEM コマンドを使用することもできます:

ALTER SYSTEM SET "job_queue_processes"=2; 次に、OE/OE として接続した後、通知ハンドラーを作成できます。ただし、その前に、通知ハンドラーによって使用されるデータベース オブジェクトを作成する必要があります。たとえば、通知ハンドラーがレジストリの変更を記録する 1 つ以上のデータベース テーブルを作成することができます。次の例では、変更が発生した日時、変更されたテーブルの名前、および通知ハンドラーがクライアントに通知メッセージを正常に送信したかどうかを示すメッセージを記録する nfresults テーブルを作成します。

CONNECT oe/oe;

CREATE TABLE nfresults (

operdate DATE,
tblname VARCHAR2(60),
rslt_msg VARCHAR2(100)
); 実際の状況では、通知イベントを記録するためにさらにテーブルを作成する必要がある場合があります。変更された行の行 ID ですが、この記事の目的では、nfresults テーブルで十分です。

UTL_HTTP を使用してクライアントに通知を送信する

また、1 つ以上の PL/SQL ストアド プロシージャを作成し、通知ハンドラからこれらのストアド プロシージャを呼び出して、より保守しやすく柔軟なソリューション プランを実現することもできます。たとえば、クライアントへの通知メッセージを実装するストアド プロシージャを作成するとします。 「リスト 1」は、PL/SQL プロシージャ sendNotification です。このプロセスでは、UTL_HTTPPL パッケージを使用して、クライアント アプリケーションに変更通知を送信します。

リスト 1. UTL_HTTP を使用してクライアントに通知を送信する

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508614.html技術記事データベース クエリの結果をキャッシュすると、スクリプトの実行時間が大幅に短縮され、データベース サーバーの負荷が最小限に抑えられることが知られています。処理したいデータが基本的に静的な場合...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。