概要
TDV ServerをActive Clusterによりクラスタ構成にしている場合、デフォルトキャッシュデータベースを利用したキャッシュがどのような動作をするのかについて説明します。
デフォルトキャッシュデータベースとは、TDV Serverをインストールするとサーバアプリケーションと同時にインストールされるPostgreSQLエンジンのキャッシュデータベースです。TDV Serverインストール時にベースポートを9400(デフォルト値)に設定した場合、9404 ポートで各TDV Serverサービス、TDV Repositoryサービス(リポジトリDB)とともに起動します。
TDV Server をクラスタ構成にした場合、各TDV Serverサービスが利用するメタデータ(データソース接続、ビュー設定等)はクラスタを構成するTDVサーバーのリポジトリDB間でリアルタイムに同期されますが、デフォルトキャッシュデータベース内のデータ(=キャッシュされたデータ)はクラスタを構成するTDVサーバー間で同期されることはなく、それぞれのデフォルトキャッシュデータベースで独立して保持されます。
実際に2台構成のTDVサーバーを利用して、デフォルトキャッシュデータベースがTDVサーバーごとに独立して下図のように動作する様子を以降に示します。
動作検証
1. データソース接続設定
2台のTDV サーバーは、データソースとして同じ外部データベースを利用します。今回の例では、PostgreSQLデータベースです。このPostgreSQLデータベースは、2台のTDV Serverとは別のサーバーにて実行されています。
以下の画像は、2台のTDVサーバーに対し、TDV Studioから接続した状態です。以降は、左側を1号機、右側を2号機とします。
2. データソース(PostgreSQL)
今回データソースとして利用するのは、外部PostgreSQLデータベース上に存在する以下の products_m テーブルです。
3. キャッシュ設定
それぞれのTDVサーバーにて、以下のように追加済みの products_m テーブルに対してデフォルトキャッシュデータベースを利用したキャッシュ設定を行います。
両サーバー にそれぞれ起動しているデフォルトキャッシュデータベース( /lib/sources/defaultCacheDataSource )に作成されるキャッシュ先テーブルのテーブルプレフィックスがTDVサーバーごとに異なることからも、デフォルトキャッシュデータベースはTDVサーバーごとに独立したものであることがわかります。
4. データソース更新
データソースであるPostgreSQLデータベース上のテーブル products_m に更新をかけます。
「アイスドリンク」カテゴリの商品を「hoge」カテゴリに変更します。
UPDATE実行
SELECT実行
5. キャッシュデータ確認①
この時点での両TDVサーバーのキャッシュデータを確認します。
以下のとおり、キャッシュがまだ更新されていないため、カテゴリ = 'アイスドリンク' の データソース更新前のデータが取得されます。
6. 1号機 キャッシュ更新
1号機のキャッシュを手動更新します。
7. キャッシュデータ確認②
再度、両TDVサーバーのキャッシュデータを確認します。
1号機のデータがデータソース側と同じように カテゴリ = 'hoge' のデータに変わったことが確認できます。一方で、2号機は依然としてデータソース更新前のデータが取得されています。
8. 2号機 キャッシュ更新
2号機のキャッシュも手動更新します。
9. キャッシュデータ確認③
再度、両TDVサーバーのキャッシュデータを確認します。
2号機のデータもデータソース側と同じように カテゴリ = 'hoge' のデータに変わったことが確認できます。