{Denodo}キャッシュモード

 

https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_module

https://community.denodo.com/docs/html/browse/8.0/jp/vdp/vql/advanced_characteristics/using_the_cache/using_the_cache

 

Virtual DataPort には、以下のキャッシュモードがあります。

-- 1. Partial モード

クエリに応答するために必要なデータがキャッシュに存在するかどうかを確認します。
このデータがキャッシュに存在しない場合、データソースに対してクエリを実行します。


-- 1.1 Explicit loads オプション

このオプションがチェックされている場合、キャッシュを明示的にロードする必要があります。
このオプションがチェックされて いない 場合、このビューに対して実行されたクエリの応答が自動的にキャッシュに保存されます。

このオプションがチェックされている場合、クエリの CONTEXT 句にパラメータ 'cache_preload' = 'true' を追加する必要があります。
これにより、クエリの結果がキャッシュに保存されます。パラメータを追加しない場合、サーバーはデータソースからデータを取得します。

 

-- 1.2 Match exact queries only オプション

このオプションがチェックされている場合、各クエリの結果はキャッシュに保存されます。
その後、 同じクエリが実行された場合、クライアントに返されるデータは、データソースからではなくキャッシュから取得されます。

→ クエリキャッシュ

 

このオプションがチェックされて いない 場合、キャッシュモジュールは、
たとえクエリがそれまで実行されていなくても、キャッシュに存在するデータでクエリを解決することを試みます。

→ データキャッシュ

 

-- 2. Full モード

ビューで Full キャッシュモードを使用している場合、そのビューのデータは常に、ソースからではなく、キャッシュデータベースから取得されます。

 

キャッシュプリロードクエリは、以下の条件を満たす必要があります。

①SELECT * FROM ...
②GROUP BY または HAVING は禁止
③WHERE 句ではサブクエリを使用できません。


-- 2.1 既存の全データを無効化してキャッシュをロードする

SELECT *
FROM db01.b_tab1
CONTEXT (
      'cache_preload' = 'true'
    , 'cache_invalidate' = 'all_rows'
    , 'cache_wait_for_load' = 'true'
    , 'cache_return_query_results' = 'false')
;


-- 2.2. キャッシュされた行の中でクエリの WHERE 句に一致するものを無効化してから、クエリの結果をキャッシュする

SELECT *
FROM db01.b_tab1
where col1 > 1
CONTEXT (
      'cache_preload' = 'true'
    , 'cache_invalidate' = 'matching_rows'
    , 'cache_wait_for_load' = 'true'
    , 'cache_return_query_results' = 'false')
;

-- 2.3 現在のキャッシュデータを無効化することなく、クエリの結果をキャッシュデータベースに保存します

SELECT *
FROM db01.b_tab1
where col1 > 1
CONTEXT (
      'cache_preload' = 'true'
    , 'cache_wait_for_load' = 'true'
    , 'cache_return_query_results' = 'false')
;

-- 3. Full 増分モード

このビューに対するクエリでは、キャッシュから取得した結果とソースから取得した最新データがマージされます。

ソースとキャッシュが同じ行を返した場合、ソースの行を返します。


基本ビューにプライマリキーが必要です。
基本ビューに、行が追加または更新された日時を示す列が 1 つまたは複数必要です。
ソースでデータから行を削除することはできません。実行できるのは、行の追加または更新だけです。