Partial モード¶
ビューのすべてのデータがキャッシュされる Full キャッシュモードとは異なり、Partial モードが有効な場合はビューの一部のタプルのみがキャッシュに保存されます。
実行時にこのキャッシュモードを使用するビューに対してクエリを実行する際、サーバーでは、クエリに応答するために必要なデータがキャッシュに存在するかどうかを確認します。このデータがキャッシュに存在しない場合、データソースに対してクエリを実行します。
データの有効時間 (TTL) に到達すると、キャッシュによってビューのキャッシュデータは無効になるので、次のクエリはデータソースをヒットします。
このモードには、以下のオプションがあります。
Explicit loads
Match exact queries only
Explicit loads¶
このオプションがチェックされている場合、キャッシュを明示的にロードする必要があります。
このオプションがチェックされて いない 場合、このビューに対して実行されたクエリの応答が自動的にキャッシュに保存されます。
このオプションがチェックされている場合、クエリの CONTEXT
句にパラメータ 'cache_preload' = 'true'
を追加する必要があります。これにより、クエリの結果がキャッシュに保存されます。パラメータを追加しない場合、サーバーはデータソースからデータを取得します。
例:
ユーザーが、
V
ビューのキャッシュを [Partial] に設定して、[Explicit loads] をチェックします。クエリ
SELECT * FROM V
を 2 回実行します。2 回とも、データはデータソースから取得されます。なぜなら、ビューのキャッシュが明示的にロードされていないからです。以下のクエリを実行します。
SELECT * FROM V CONTEXT('cache_preload' = 'true')
クエリ
SELECT * FROM V
を実行します。今度は、サーバーはキャッシュからデータを取得します。クエリを実行してから TTL (有効時間) 秒が経過すると、サーバーはキャッシュデータを無効とマークします。その後にこのビューに対してクエリを実行した場合、このビューのキャッシュが再ロードされるまで、データはソースから取得されます。
キャッシュプリロードクエリの推奨パラメータのリストについては、「 キャッシュロードクエリの推奨パラメータ 」を参照してください。
Match exact queries only¶
このオプションがチェックされている場合、各クエリの結果はキャッシュに保存されます。その後、 同じ クエリが実行された場合、キャッシュ内のこのクエリのエントリが期限切れでなければ (TTL に達していなければ)、クライアントに返されるデータは、データソースからではなくキャッシュから取得されます。
このオプションがチェックされて いない 場合、キャッシュモジュールは、たとえクエリがそれまで実行されていなくても、キャッシュに存在するデータでクエリを解決することを試みます。
このオプションを有効または無効にした場合に発生する状況について、例を見てみましょう。
ユーザーが、
V
ビューのキャッシュを [Partial] に設定します。クエリ
SELECT * FROM V
を実行します。このクエリの結果は、データソースから取得され、キャッシュに保存されます。[Match exact queries only] をチェックしてキャッシュを有効にしている場合:
同じクエリを再実行します。この場合、結果は、データソースからではなく、キャッシュから取得されます。
クエリ
SELECT * FROM V where field1 = 1.0
を実行します。この場合、サーバーは、キャッシュからではなく、 データソースから データを取得します。使用するビューは前の手順と同じですが、条件が異なります。したがって、キャッシュの内容は使用されません。
[Match exact queries only] がチェックされて いない 場合:
クエリ
SELECT * FROM V WHERE field1 = a
を実行します。キャッシュモジュールは、このクエリの結果がすでにキャッシュに保存されている最初のクエリのサブセットであることを検出します。したがって、結果を返すためにソースにアクセスする必要はありません。[Match exact queries only] オプションがチェックされていた場合はサーバーがデータソースにアクセスしてクエリの結果を取得することに注意してください。なぜなら、クエリが異なるからです。
クエリ
SELECT * FROM V
を実行してから TTL (有効時間) 秒が経過すると、サーバーはこのクエリのキャッシュを無効とマークします。その後にユーザーが同じクエリを再実行した場合、キャッシュモジュールはこのクエリのエントリが無効であることを検出します。したがって、サーバーは、キャッシュからではなく、データソースからデータを取得します。
重要
特定のタイプの 非リレーショナル ソースからデータをキャッシュする場合は、[Match exact queries only] オプションをチェックする必要があります。たとえば、クエリの最初の 100 件の結果のみを返す Web サイトからデータを取得する WWW (ITPilot) 基本ビューから取得したデータをキャッシュする場合、このオプションを有効にする必要があります。このシナリオでは、クエリの結果は、
SELECT *
FROM V
WHERE field1 = a and field2 = b
以下の結果のサブセットではない可能性があります。
SELECT *
FROM V
WHERE field1 = 1