明示的なデータのキャッシュ
明示的なキャッシュの場合は(AutoCache =false)、どのデータをキャッシュするかと、ライブデータではなくキャッシュをいつクエリするかを厳密に指定します。明示的なキャッシュでは、CACHE ステートメントを使用して、キャッシュの内容を完全に制御できます。このセクションでは、本製品 が提供するキャッシュ機能の活用方法をいくつか説明します。
キャッシュの作成
キャッシュにデータをロードするには、次のステートメントを発行します。
CACHE SELECT * FROM tableName WHERE ...
ステートメントが発行されると、tableName 内の一致するデータが対応するテーブルにロードされます。
キャッシュの更新
このセクションでは、キャッシュを更新する2つの方法について説明します。
SELECT ステートメントを使った更新
次の例は、キャッシュテーブル内で変更された行を更新し、不足している行を追加するステートメントを示します。ただし、このステートメントはキャッシュ内にすでに含まれている余分な行は削除しません。このステートメントは、新しい行をマージするか、または既存の行を更新するだけです。
CACHE SELECT * FROM MARA WHERE ERNAM = 'BEHRMANN'
SQLCHAR *cmd = (SQLCHAR*)"CACHE SELECT * FROM MARA WHERE ERNAM = 'BEHRMANN'"; SQLExecDirect(hstmt, cmd, SQL_NTS);
TRUNCATE ステートメントを使った更新
次の例は、キャッシュテーブル内で変更された行を更新し、不足している行を追加するステートメントを示します。このステートメントは、ライブデータソースに存在しないキャッシュテーブル内の行も削除できます。
CACHE WITH TRUNCATE SELECT * FROM MARA WHERE ERNAM = 'BEHRMANN'
SQLCHAR *cmd = (SQLCHAR*)"CACHE WITH TRUNCATE SELECT * FROM MARA WHERE ERNAM = 'BEHRMANN'"; SQLExecDirect(hstmt, cmd, SQL_NTS);
オンラインまたはオフラインモードでデータをクエリ
このセクションでは、オンラインまたはオフラインモードでデータをクエリする方法について説明します。
Online:キャッシュテーブルの選択
次の例に示すように、tableName#CACHE 構文を使用して、オンラインのままキャッシュに対して明示的にクエリを実行することができます。
SELECT * FROM MARA#CACHE
Offline:キャッシュテーブルの選択
Offline がtrue に設定されている場合、実行するすべてのSELECT ステートメントは、キャッシュテーブルを明示的に指定するかどうかに関係なく、常にローカルキャッシュデータベースに対して実行されます。キャッシュデータだけが誤って更新されることがないように、Offline モードではキャッシュの変更は無効化されます。Offline が設定されている場合にDELETE/UPDATE/INSERT ステートメントを実行すると、例外が発生します。
次の例は、Offline がtrue に設定されているため、ライブデータソースからではなく、ローカルキャッシュに対してSELECT を実行します。
SELECT * FROM MARA WHERE ERNAM='BEHRMANN' ORDER BY MATNR ASC
キャッシュからのデータの削除
データベースへの直接接続を構築することによって、キャッシュからデータを削除できます。本製品 はキャッシュからデータを手動で削除することをサポートしていないことに注意してください。
一般的なユースケース
一般的なキャッシュの用途は、アプリケーションからのクエリは常にキャッシュデータに対して実行し、キャッシュの更新は設定された間隔(1日1回、2時間ごとなど)でのみ実行するというものです。この実装には2つの方法があります。
- AutoCache = false とOffline = false。アプリケーションによって発行されるすべてのクエリは、明示的にtableName#CACHE テーブルを参照します。キャッシュを更新する必要がある場合、アプリケーションはtableName#CACHE ... ステートメントを実行して、キャッシュデータを最新の状態に保ちます。
- Offline = true。キャッシュは、アプリケーションでは透過的に処理されます。すべてのクエリは常にテーブルに対して実行されるため、ほとんどのアプリケーションコードは、キャッシュの実行を認識する必要はありません。キャッシュデータを更新するには、Offline = false で個別の接続を作成し、tableName#CACHE ... ステートメントを実行するだけです。