TDVのデフォルトキャッシュ機能の利用方法について説明します。
キャッシュターゲット
TDVではキャッシュターゲットとして大きく分けて以下の3通りを選択できます。
キャッシュターゲット | 説明 |
---|---|
デフォルトキャッシュデータベース | TDVインストール時に自動で構築されるデフォルトのキャッシュデータベースにキャッシュデータを保存する方式です。 DBエンジンはPostgreSQLです。 ただし、パフォーマンスチューニングの余地がほとんどなく、TDV ServerをActive Cluster構成にしても各TDV Serverのデフォルトキャッシュデータベースはクラスタ構成とはならず大規模ユースケースに不向きであることから、商用環境での利用は推奨されていません。 |
外部キャッシュデータベース | 利用者が用意した任意のデータベースにキャッシュデータを保存する方式です。 |
ファイル | データベースではなくファイルにキャッシュデータを保存する方式です。 主に設計・開発時の利用を想定しており、商用環境での利用は推奨されていません。 |
本記事では、「デフォルトキャッシュデータベース」を利用する方式について説明します。
更新モード
TDVではキャッシュの更新モードとしては以下が提供されています。
キャッシュターゲット | 説明 |
---|---|
完全更新モード | 「完全更新モード」でキャッシュを利用します。 キャッシュリフレッシュのたびにキャッシュテーブル内のデータはすべて置換されます。 最も簡単なアプローチです。 |
増分更新モード | キャッシュ更新アクションが開始されると、変更されたデータのみが取得され、キャッシュで更新されます。 |
本記事では、「完全更新モード」を利用する方式について説明します。
検証環境
PostgreSQLをデータソースするビューorderDetails
にキャッシュ設定を行います。
データソース
データソースとして外部のPostgreSQLデータベースに存在する以下3種類のテーブルをdemo_postgres
としてTDVに追加します。
- orders
- products
- stores
orders
products
stores
orderDetailsビュー
キャッシュの有効化
以下の手順でキャッシュを有効化します。
1. orderDetails
ビューを開き、キャッシュタブにてキャッシュの作成ボタンをクリックします。
2. 以下のとおり設定し、ビューを保存します。
- ステータスの有効に✓を入れる
- ストレージのデフォルトのキャッシュデータベースを使用に✓を入れる
- 詳細の完全更新モードを選択する
3. 保存すると、ステータスが NOT LOADED となることを確認します。
これは、まだデフォルトキャッシュデータベースにデータがロードされていないことを意味しています。
また、同時に以下が設定されていることも確認できます。
- データソース:デフォルトキャッシュデータベースのTDV上のパス
- テーブルスキーマ(オプション):データロード先のテーブル(キャッシュテーブル)が作成されるスキーマ
- テーブルプレフィックス:キャッシュテーブル名に付与されるプレフィックス
- キャッシュテーブルの数
これらの設定はTDVにより自動で行われます。
この時点で、リソースツリー上のビューにキャッシュが有効化されたことを示すアイコンがつきます。
lib/sources
配下にあるdefaultCacheDataSource
で自動生成されたキャッシュテーブルを確認することができます。
キャッシュの初回ロード
以下の手順でキャッシュテーブルに対してデータを初回ロードします。
1. 更新モードの今すぐ更新ボタンをクリックし、キャッシュをリフレッシュします。
2. ダイアログが表示されるのでOKボタンをクリックします。
3. 正常にデータがキャッシュテーブルにロードされれば、ステータスが UP になります。
4. ビューを実行し、これまでと同じようにデータが取得できることを確認します。
以降はorderDetails
ビューに対してクエリを実行すると、以下の実行計画が示す通り、デフォルトキャッシュデータベースからデータが取得されるようになり、実際のデータソースである demo_postgres
データソースに対してクエリが実行されることはありません。
demo_postgres
データソースに対してクエリが実行されるのは、キャッシュをリフレッシュするときのみとなります。
また、リネージュは以下のようになります。
キャッシュのリフレッシュ - INSERT
データソース(PostgreSQL)に新規レコードが追加された後に、キャッシュをリフレッシュし、デフォルトキャッシュテーブル内のデータにもレコード追加が反映されることを確認します。
データソースに新規レコードを追加する前の状態が、データソース にて示した状態であることを前提とします。
データソースのorders
テーブルには新規レコードを以下のように追加します。
しかし、この時点でorderDetails
ビューを実行しても以下のとおりレコード追加は反映されていません。
キャッシュを最新化するために、以下の手順でキャッシュテーブルに対してキャッシュをリフレッシュします。
1. 更新モードの今すぐ更新ボタンをクリックし、キャッシュをリフレッシュします。
2. ダイアログが表示されるのでOKボタンをクリックします。
3. 正常にキャッシュがリフレッシュされ、ステータスが UP となっていることを確認します。
4. 再度、orderDetails
ビューを実行し、レコード追加が反映されていることを確認します。
キャッシュのリフレッシュ - INSERT/UPDATE/DELETE
データソース(PostgreSQL)に対して、INSERT/UPDATE/DELETEが実行された後にキャッシュをリフレッシュし、デフォルトキャッシュテーブル内のデータにも変更が反映されることを確認します。
データソースに変更をかける前の状態が、データソース にて示した状態であることを前提とします。
データソースのorders
、products
、stores
テーブルに対し以下のような変更を加えます。
orders
products
stores
しかし、この時点でorderDetails
ビューを実行しても以下のとおりレコード変更は反映されていません。
キャッシュを最新化するために、以下の手順でキャッシュテーブルに対してキャッシュをリフレッシュします。
1. 更新モードの今すぐ更新ボタンをクリックし、キャッシュをリフレッシュします。
2. ダイアログが表示されるのでOKボタンをクリックします。
3. 正常にキャッシュがリフレッシュされ、ステータスが UP となっていることを確認します。
4. 再度、orderDetails
ビューを実行し、レコード追加が反映されていることを確認します。