TDV キャッシングの概念
このセクションでは、TDV キャッシングに関連する多くの概念を紹介します。これらの概念を十分に理解すれば、キャッシングを使用するかどうか、お使いの環境に最適な TDV キャッシュ オプションはどれかを判断できます。
キャッシュとは?
キャッシュとは、頻繁にアクセスされるデータのコピーを保持する場所のことです。キャッシュがなければ、このようなデータの取得および計算に高いコストがかかります。
キャッシュを使用する理由
データ キャッシングは、データを複製したり、データが利用される場所の近くにデータを保存したりしてアプリケーションのパフォーマンスを向上させるのに役立つ重要なデータ設計オプションです。キャッシングでは、ワークロードを複数のストレージ場所に分散することで、データベース テーブルに対して実行される、大量のリソースを消費するクエリの影響を軽減することもできます。同じクエリを複数回実行して同じ結果セットを返す代わりに、キャッシュを使用して結果を保存し、それを再利用できます。
いつキャッシングを構成する必要がありますか?
データベースへの直接クエリによってデータの取得に顕著な遅延を引き起こすパフォーマンス上の問題が発生する場合は、データ キャッシングを検討するときかもしれません。
利用できるキャッシュの種類は?
TDV では、お客様がニーズに合ったキャッシュを作成できるように、複数のキャッシング オプションを設計しました。オプションは次のとおりです。
|
•
|
フル リフレッシュ キャッシュ - キャッシュ リフレッシュ アクションが開始されると、キャッシュ内のすべてのデータが取得されます。 |
|
•
|
インクリメンタル リフレッシュ キャッシュ - キャッシュ リフレッシュ アクションが開始されると、変更されたデータのみが取得され、キャッシュ内で更新されます。 |
|
—
|
プル・ベースのインクリメンタル キャッシュ - インクリメンタル キャッシュの更新アクションは、消費するクライアント アプリケーションからの要求によって開始されます。この方法は、オンデマンドと見なすことができます。 |
|
—
|
プッシュ・ベースのインクリメンタル キャッシュ-オプションの構成中に定義されたとおり、インクリメンタル キャッシュの更新アクションが自動的に開始されます。キャッシュ内のデータは関係なく更新されます。 |
キャッシングを使用するときに考慮する価値がある、データベースベンダーから提供される追加の拡張機能は次のとおりです。
|
•
|
FastLoad などのネイティブ ローディング機能 |
|
•
|
キャッシュ データを分割し、パラレル プロセスを実行してデータをキャッシュ ターゲットにロードするパラレル キャッシュ機能 |
フル リフレッシュとインクリメンタル リフレッシュとは?
キャッシュ データの更新をインクリメンタルに、または完全に行うこともできます。完全な更新では、前回のキャッシュ更新以降に変更されたデータと変更されていないデータを含むキャッシュ内のデータ全体が取得されます。インクリメンタルなキャッシュ更新では、更新アクションの実行時に、変更されたデータ (新しく追加されたデータ、変更されたデータ、削除されたデータ) のみがキャッシュで更新されます。
[アドバンス] オプション の下の [キャッシュ] タブで、キャッシュのいずれかを選択できます。プッシュ・ベースのインクリメンタル リフレッシュが必要な場合は、「プッシュ・ベースのインクリメンタル キャッシュ」で説明されているいくつかの特別な構成ステップが必要です。
インクリメンタル キャッシュ オプションとは?
TDV には、2 つのインクリメンタル キャッシング方法があります。キャッシュへの更新は、次の 2 つのいずれかのモードで伝達できます。
プル・ベースのインクリメンタル キャッシュは、TDV キャッシュ メカニズムと 2 つのスクリプトを使用してセット アップできます。プル・ベースのインクリメンタル キャッシュでは、ユーザーまたはクライアント アプリケーションは、キャッシュのコピーを集中型のキャッシュ コピーと同期するよう要求する必要があります。この非同期メソッドまたはキャッシュ データの更新により、キャッシュのローディング時間を短縮できます。これは、最初のデータがキャッシュにローディングされた後、後続の各ローディングが小さなデータ変更でのみキャッシュを更新するためです。プル・ベースのインクリメンタル キャッシュの詳細については、「プル・ベースのインクリメンタル キャッシュの設定」を参照してください。
|
•
|
プッシュ・ベースのインクリメンタル キャッシュ |
プッシュ・ベースのインクリメンタル キャッシングは、ネイティブ TDV キャッシング メカニズムと TDV Change Management Service (CMS) を使用してセット アップし、Central Event Server を構成できます。このキャッシュ データ更新の同期方式により、キャッシュ データのすべてのコピーにわたってキャッシュの一貫性が確保されます。インクリメンタル キャッシュ内のデータを保護するために、プライマリ Central Event Server をバックアップするように TDV Server を構成できます。ソースとキャッシュの間でトランザクションのセマンティクスが異なるのを防ぐために、ソースの変更がキャプチャされ、影響を受けるすべてのビューに適用されます。プッシュ・ベースのインクリメンタル キャッシュの詳細については、「Oracle のプッシュ・ベースのインクリメンタル キャッシュの設定」を参照してください。
キャッシュできる TDV リソースは?
キャッシングを使用すると、さまざまなデータ ソースのビュー、テーブル、またはプロシージャから生成されたデータを保存できます。テーブル オブジェクトには、テーブル、データ ソースからのビュー、および TDV ビューが含まれます。プロシージャオブジェクトには、SQL スクリプト、パラメーター化されたクエリ、および XML 変換が含まれます。
利用可能なキャッシュ ストレージ オプションは?
ストレージ オプションは、キャッシュに関連する場所と一部の動作を決定します。キャッシュは次の形式で保存できます。
|
•
|
デフォルト - キャッシュ データは、TDV によって決定されたデータベースの場所に保存されます。 |
|
•
|
自動 - キャッシュ データは、TDV によって決定された構造化されたファイルの場所に保存されます。 |
|
•
|
シングル テーブル - キャッシュ データは、ユーザーが決定した構造化データベースの場所に保存されます。 |
|
•
|
マルチ テーブル - キャッシュ データは、ユーザーが決定した数のキャッシュ テーブル内のユーザーが決定したデータベースの場所に保存されます。 |
シングル テーブル キャッシュの場合、データの複数のスナップショット (ある時点で取得されたデータの写真) が同じ物理テーブルに格納されます。複数のスナップショットが同じテーブルに格納されるため、キャッシュされたデータのインデックスはあまり効果的ではありません。マルチ テーブル キャッシュ オプションを使用すると、TDV はキャッシュされたリソースごとに複数の物理テーブルを使用して、各スナップショットが独自のテーブルに格納されるようにします。この機能により、古いキャッシュ データの削除と、新しくキャッシュされたデータのインデキシングの速度が向上します。マルチ テーブル キャッシングは、主に、長期間保持される大量のデータを含むキャッシュを対象としています。このタイプのキャッシュの設定の詳細については、「データベース ターゲットでの複数テーブル キャッシュの作成」を参照してください。
キャッシュ ターゲットとは?
キャッシュ ターゲットは、データを指定された期間保存するために使用されるファイル、データベース テーブル、または複数のデータベース テーブルです。
データ ソースをキャッシュ ターゲットにするには、「キャッシュの要件と制限事項」で指定されている前提条件に準拠する必要があります。同じキャッシュ リソースをソースとターゲットの両方として機能させることは可能ですが、それらを異なるものにする方が一般的です。複数のリソースからのデータは、キャッシュ ターゲット テーブルを共有できません。
キャッシュするデータのタイプに最適なキャッシュ ターゲットと、それを操作する方法を検討してください。たとえば、キャッシュ ターゲットは、ソース内の重要なデータ タイプをサポートしていない可能性があります。「キャッシュの要件と制限事項」を確認してください。また、『TDV リファレンス ガイド』の「キャッシュ データ タイプ マッピング」のセクションも確認してください。
キャッシュに使用できる更新オプションは?
TDV のキャッシュ データの更新は高度に構成可能です。TDV Studio UI から利用できる標準のスケジューリング ツールを使用するか、カスタムの更新動作を定義できます。次の標準の更新オプションを使用できます。
|
•
|
ポリシーに従う - 再利用可能なキャッシュ ポリシーを使用して、キャッシュの更新スケジュールを定義できます。ポリシーを使用して、テーブル、ビュー、およびプロシージャの更新オプションを定義できます。 |
|
•
|
すぐに - TDV ユーザーが [キャッシュ] タブを開いて [今すぐ更新] をクリックすると、すぐにキャッシュが更新されます。 |
|
•
|
1 回限り - 特定の日時にキャッシュを 1 回更新するようにスケジュールできます。 |
|
•
|
定期的 - 定期的に繰り返されるキャッシュ更新アクションを定義できます。 |
|
•
|
カスタム - キャッシュの更新動作を制御および定義する SQL スクリプト、Java プログラム、または Web サービスを定義することもできます。たとえば、適切な形式の件名を持つ特定の電子メール アドレスに電子メールが送信された場合にキャッシュの更新を開始するカスタム Java プログラムを作成できます。カスタム更新動作の定義の詳細については、「プログラムによるキャッシュの更新とクリア」を参照してください。 |
キャッシングが定義されているビュー(またはテーブル)のクエリを変更した場合、キャッシュは自動的に更新されません。正しい結果セットを取得するには、更新を実行するか、次回のスケジュールされた更新サイクルまで待つ必要があります。
キャッシュ ポリシーとは?
キャッシュ ポリシーは、キャッシュの更新と有効期限のスケジュールを定義します。定義したキャッシュ ポリシーは、キャッシュする Studio リソースの更新と有効期限のスケジュールを制御するために使用できます。
キャッシュ内のリソースに同じ更新スケジュールと有効期限スケジュールを設定できるため、キャッシュ データにアクセスするアプリケーションのデータの整合性と精度を向上させることができます。たとえば、ORDERS テーブルと ORDERDETAILS テーブルのキャッシュ データに依存するアプリケーションがある場合、キャッシュ ポリシーを使用して、それらのキャッシュが同時に更新されるようにすることができます。
キャッシュ ポリシーを使用すると、キャッシュのパフォーマンスも向上します。キャッシュ ポリシーが設定されている場合、特定のポリシーのキャッシュ更新アクションの一部であるリソースのリストが既知であるため、TDV はパフォーマンスに最適なキャッシュ ロード戦略を計算できます。
キャッシュ ポリシーが設定されている場合、キャッシュ データの整合性は完全に維持されるか、まったく維持されないかのいずれかです。キャッシュ ポリシーに含まれるリソースの 1 つが更新アクション時に失敗した場合、すべてのキャッシュが以前に成功したデータのスナップショットにロールバックされます。このため、キャッシュ ポリシーとインクリメンタル キャッシングの併用はサポートされていません。
キャッシュ データが期限切れになり、キャッシュから削除されるのはいつですか?
キャッシュの更新は、キャッシュの内容を作成または更新するために使用されます。キャッシュの構成方法に応じて、以前の更新からのデータがどのように期限切れになり、キャッシュから削除される可能性があるかが決まります。
期限切れのキャッシュ バージョンは、そのバージョンを使用するすべてのトランザクション ホールドが完了するか、ロールバックされるまで削除されません。
一般的な有効期限のスケジュールは次のとおりです。
|
•
|
なし - 現在および以前のすべてのデータ スナップショットをキャッシュに保持します。 |
|
•
|
定期的 - 定期的に繰り返されるキャッシュの有効期限を定義できます。たとえば、指定された数の週または数年後。 |
|
•
|
カスタム基準に従う - カスタム SQL スクリプト、Java プログラム、または Web サービスを定義することにより、キャッシュ データの更新と消去を制御できます。 |
キャッシュ データをクリアするかどうかを制御することもできます。
|
•
|
すぐに - [今すぐクリア]ボタンを使用してキャッシュをクリアします。これにより、キャッシュされた古いバージョンのデータが期限切れとしてマークされ、新しいリクエストで使用できなくなります。その後、システムはバックグラウンド タスクを開始して、有効期限が切れたキャッシュ バージョンが解放されるとクリアします。 |
|
•
|
失敗時 - このオプションを選択すると、更新が失敗した場合にキャッシュがクリアされます。このオプションを使用すると、更新中に以前にキャッシュされたデータにアクセスできます。 |
|
•
|
更新前 - このオプションを選択すると、更新を開始する前にキャッシュが自動的にクリアされます。キャッシュされたデータから読み取ろうとするクライアントは、新しいデータを待つ必要があります。すべての新しいリクエストで新しいキャッシュ バージョンを使用するように強制し、キャッシュされた古いバージョンを期限切れとしてマークしますが、実際にはクリアされません。キャッシュされたリソースに対する新しいリクエストでは、キャッシュの更新によって提供される最新のデータを使用する必要があります。 |
|
•
|
有効期限に定期的に - キャッシュの有効期限が切れると、画面の有効期限スケジュール部分で時間が定義されている場合、古いキャッシュ データが消去されます。 |
|
•
|
カスタム基準に従う - カスタム SQL スクリプト、Java プログラム、または Web サービスを定義することにより、キャッシュ データの更新と消去を制御できます。 |
キャッシュのバージョン管理、トランザクションの整合性、および古いキャッシュの内容が消去されるタイミングとは?
TDV のキャッシュのバージョン管理では、既存のトランザクションが完了するまで古いキャッシュ バージョンを保持することにより、トランザクションの整合性を維持します。期限切れのキャッシュ バージョンは、そのバージョンを使用するすべてのトランザクション ホールドが完了するか、ロールバックされるまで削除されません。キャッシュのクリアを手動で開始した場合も、古いキャッシュ バージョンは「期限切れ」とマークされ、新しい要求で使用できなくなるだけです。その後、システムによってバックグラウンド タスクが開始され、期限切れのキャッシュ バージョンが解放されたときにそのバージョンがクリアされます。
TDV は、以前のすべてのキャッシュ データ スナップショットを保持することで、長時間実行されているキャッシュの更新を適切に処理するように構成できます。これにより、キャッシュがバックグラウンドでアクティブに更新されている間、データの使用可能性が維持されます。
読み取りの一貫性を維持するため、キャッシュされたビューのデータを使用する実行時間の長いクエリでは、キャッシュの更新の開始時に使用していた元のキャッシュされたビューを使用して計算を完了できます。
キャッシュをエクスポートおよびインポートできますか?
TDV 内で定義したすべてのキャッシュ情報は、エクスポートして TDV に再インポートできます。TDV エクスポート機能を使用すると、TDV 開発作業を効率的に管理できます。定期的にエクスポートすると、作業内容の有用なロールバック スナップショットが得られます。
キャッシュ ポリシーを使用するリソースのエラー処理はどのように機能しますか?
キャッシュの更新がキャッシュ ポリシーによって開始され、完了前の任意の時点で失敗した場合、すべてのキャッシュが最後に成功したスナップショットにロールバックされます。
キャッシュの更新と有効期限が個別に定義されたリソースのエラー処理はどのように機能しますか?
更新中に、キャッシュされるデータを提供するデータ ソースまたはキャッシュされたデータを保存するために使用されるデータ ソースに障害が発生した場合、キャッシュは、以前のスナップショットが使用可能かどうかに応じて、「失敗」または「失効」とマークされます。
更新中に TDV Server に障害が発生した場合、サーバーの再起動時にキャッシュは「失敗」または「失効」とマークされます。
完全更新を実行するキャッシュの場合、サーバーが更新の途中で停止すると、サーバーの再起動時に更新の試行が「失敗」とマークされます。部分的なデータは、最終的にガベージコレクターによって処理されます。
インクリメンタル更新を実行するキャッシュの場合、サーバーが更新の途中で停止すると、サーバーの再起動時にキャッシュ ステータスが「ダウン」とマークされます。