ヘッダーをスキップ
Oracle® TimesTen Application-Tier Database Cacheユーザーズ・ガイド
11g リリース2 (11.2.2)
B66442-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

1 TimesTen Application-Tier Database Cacheの概念

TimesTen Application-Tier Database CacheはOracle Database製品オプションで、Oracle TimesTen In-Memory Databaseが含まれます。これはアプリケーション層でデータベース・キャッシュとして使用され、Oracle DatabaseデータをキャッシュしてOracle Databaseでのワークロードを削減します。また、Oracle DatabaseとTimesTenデータベース間の接続とデータ転送を可能にし、TimesTenデータベースに流れる大量のイベントの取得と処理、および後続データのOracle Databaseへの転送も簡単になります。

キャッシュ・グループ内でTimesTenデータベースにOracle Databaseデータをキャッシュできます。TimesTenデータベースのキャッシュ・グループでは、単一のOracle Database表または関連する一連のOracle Database表をキャッシュできます。また、グローバル・キャッシュ・グループ(キャッシュ・グリッドのメンバーである必要があります)を使用して、Oracle Databaseデータを複数のTimesTenデータベースにわたってグローバルに共有できます。

この章の内容は次のとおりです。

データ管理の設計

TimesTenインメモリー・データベースの使用方法を設計する場合は、最初に次のいずれかを選択する必要があります。

  • データをローカルで管理します(この場合、各TimesTenインメモリー・データベースは他のTimesTenインメモリー・データベースとは別個に動作します)。このオプションは、グローバル・データを管理するよりは簡単ですが、TimesTenでは、TimesTenインメモリー・データベースすべてにわたるデータの一貫性が管理されません。詳細は、「ローカルでのデータの管理」を参照してください。

  • キャッシュ・グリッドを使用し、複数のTimesTenインメモリー・データベースにわたってデータをグローバルに管理します。これはデフォルトの方法です。キャッシュ・グリッドとは、グローバル・キャッシュ・グループ内にあるアプリケーション・データをまとめて管理するTimesTen Cacheデータベースの集合のことです。キャッシュ・グリッドには一連の分散TimesTenインメモリー・データベースがあり、Oracle Databaseからデータをキャッシュし、このTimesTenデータベースにあるグローバル・キャッシュ・グループのキャッシュ一貫性を確保するために連携します。詳細は、「キャッシュ・グリッドの概要」を参照してください。

キャッシュ・グリッドの概要

キャッシュ・グリッドとは、Oracle Databaseからデータをキャッシュし、TimesTenデータベース内のグローバル・キャッシュ・グループのキャッシュ一貫性を確保するために連携する一連の分散TimesTenインメモリー・データベースのことです。キャッシュ・グリッドは、グローバル・キャッシュ・グループを使用する予定がある場合にのみ使用します。

グリッドは、リレーショナル・データ・モデルを使用してアプリケーション・データをまとめて管理する1つ以上のインメモリー・データベース・グリッド・メンバーで構成されています。グリッドのメンバーは、単一のOracle Databaseからデータをキャッシュします。スタンドアロンのTimesTenデータベースまたはアクティブ・スタンバイ・ペアのいずれかをグリッド・メンバーにすることができます。

グリッド・ノードとは、グリッド・メンバーのデータベースのことです。ノードは次のいずれかになります。

  • スタンドアロンTimesTenデータベース

  • アクティブ・スタンバイ・ペアのアクティブ・マスター・データベース

  • アクティブ・スタンバイ・ペアのスタンバイ・マスター・データベース

したがって、スタンドアロン・データベースであるグリッド・メンバーは、1つのノードで構成されます。アクティブ・スタンバイ・ペアであるグリッド・メンバーは、2つのノードで構成されます。

図1-1に、3つのメンバー(2つのスタンドアロンTimesTenデータベースと1つのアクティブ・スタンバイ・ペア)からなるキャッシュ・グリッドを示します。グリッドには4つのノードがあり、それらは、2つのスタンドアロンTimesTenデータベース、アクティブ・スタンバイ・ペアのアクティブ・マスター・データベースおよびスタンバイ・マスター・データベースです。読取り専用サブスクライバ・データベースは、Oracle Databaseとの接続性がないため、キャッシュ・グリッドに含まれません。読取り専用サブスクライバでは、スタンバイ・マスター・データベースからレプリケートされた更新を受け取ります。

図1-1 3つのグリッド・メンバーがOracle Databaseからデータをキャッシュするキャッシュ・グリッド

図1-1の説明が続きます。
「図1-1 3つのグリッド・メンバーがOracle Databaseからデータをキャッシュするキャッシュ・グリッド」の説明

キャッシュ・グリッドでは、グローバル・キャッシュ・データが共有記憶域のない複数のグリッド・メンバーに動的に分散されます。このアーキテクチャによって、キャッシュ・グリッドの容量は、アプリケーションの処理ニーズに応じて拡張できます。ワークロードの増減に応じて、新しいグリッド・メンバーがグリッドにアタッチされたり、既存のグリッド・メンバーがグリッドからデタッチされます。グリッドへのアタッチまたはグリッドからのデタッチはオンラインで処理され、他のグリッド・メンバーに対する処理に割り込みません。

リクエストがグリッド・メンバーに送信されると、キャッシュ・グリッドでは、アプリケーション・アクセス・パターンに基づいて自動的にデータが再分散されます。データの場所はアプリケーションに対して透過的ですが、キャッシュ・グリッドでは、アクセス時間を最小限に抑えるために動的にデータを再分散します。キャッシュ・グリッドによって、グリッド・メンバー間で自動的にキャッシュ一貫性およびトランザクション一貫性が維持されます。また、データの再分散を行わずにグローバル問合せを実行するようにキャッシュ・グリッドを構成することもできます。「キャッシュ・グリッドに対するグローバル問合せの実行」を参照してください。

キャッシュ・グリッド内のTimesTenデータベースには、明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループだけでなく、様々なキャッシュ・グループ分類およびカテゴリでサポートされているキャッシュ・グループ・タイプのローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループも含めることができます。ただし、キャッシュの一貫性は、グローバル・キャッシュ・グループに対してのみ管理されます。

キャッシュ・グループの様々なタイプの詳細は、「キャッシュ・グループ・タイプ」を参照してください。

明示的にロードされるキャッシュ・グループと動的キャッシュ・グループ間の相違の詳細は、「キャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループ」を参照してください。

ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ間の相違の詳細は、「キャッシュ・グリッド全体でのデータの共有: ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ」を参照してください。

キャッシュ・グリッドの作成およびTimesTenデータベースのキャッシュ・グリッドへの関連付けの詳細は、「キャッシュ・グリッドの構成」を参照してください。

キャッシュ・グループの概要

キャッシュ・グループでは、TimesTenデータベースにキャッシュするOracle Databaseデータを定義します。キャッシュ・グループを定義して、単一のOracle Database表のすべてかその一部または一連の関連付けられたOracle Database表をキャッシュできます。

図1-2に、単一のOracle Database表customerのサブセットをキャッシュするtarget_customersというキャッシュ・グループを示します。

図1-2 単一の表のキャッシュ・グループ

図1-2の説明が続きます。
「図1-2 単一の表のキャッシュ・グループ」の説明

1つのルート表および1つ以上の子表を定義すると、複数のOracle Database表を同じキャッシュ・グループにキャッシュできます。キャッシュ・グループには、ルート表を1つのみ含めることができます。

複数の表を持つキャッシュ・グループでは、各子表が外部キー制約を使用して同じキャッシュ・グループ内のルート表または別の子表を参照する必要があります。複数表のキャッシュ・グループ内の表は外部キー制約を介してTimesTenデータベースで互いに関連している必要がありますが、対応する表が必ずしもOracle Databaseで互いに関連している必要はありません。ルート表は外部キー制約のある表を参照しません。複数表のキャッシュ・グループの特性の詳細は、「複数表のキャッシュ・グループ」を参照してください。

キャッシュ・インスタンス

データは、キャッシュ・インスタンスと呼ばれる単位でOracle DatabaseからTimesTenデータベース内のキャッシュ・グループにロードされます。キャッシュ・インスタンスは、子表の関連行のセットとともにキャッシュ・グループのルート表の単一行として定義されます。

図1-3に、customer_ordersキャッシュ・グループの表を3つ示します。ルート表はcustomerで、ordersおよびorder_itemは子表です。customer表のcust_num主キー列の値が122の行で識別されるキャッシュ・インスタンスには、次の行が含まれています。

  • orders表のcust_num列の値が122の行2つ(ord_num主キー列の値は44325または65432)

  • order_item表のord_num列の値が44325または65432の行3つ

図1-3 複数表のキャッシュ・グループ

図1-3の説明が続きます。
「図1-3 複数表のキャッシュ・グループ」の説明

キャッシュ・グループ・タイプ

よく使用されるキャッシュ・グループのタイプは、次のとおりです。

  • 読取り専用キャッシュ・グループ

    読取り専用キャッシュ・グループでは、Oracle Databaseのキャッシュ表にコミットされた更新がTimesTenデータベースのキャッシュ表に自動的にリフレッシュされるキャッシュ動作が実行されます。読取り専用キャッシュ・グループの使用が適しているのは、参照データがアプリケーションから頻繁にアクセスされる場合です。

    読取り専用キャッシュ・グループの詳細は、「読取り専用キャッシュ・グループ」を参照してください。

  • ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループ

    AWTキャッシュ・グループでは、TimesTenデータベースのキャッシュ表にコミットされた更新が自動的にOracle Databaseのキャッシュ表に非同期に伝播されるキャッシュ動作が実行されます。AWTキャッシュ・グループの使用が適しているのは、高速データ取得およびオンライン・トランザクション処理です。

    AWTキャッシュ・グループの詳細は、「ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループ」を参照してください。

キャッシュ・グループには、この他に次のタイプがあります。

  • SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループ

    SWTキャッシュ・グループでは、TimesTenデータベースのキャッシュ表にコミットされた更新が自動的にOracle Databaseのキャッシュ表に同期して伝播されるキャッシュ動作が実行されます。

    SWTキャッシュ・グループの詳細は、「SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループ」を参照してください。

  • ユーザー管理キャッシュ・グループ

    ユーザー管理キャッシュ・グループでは、キャッシュ動作のカスタマイズを定義します。

    たとえば、自動リフレッシュまたは自動伝播を使用しないキャッシュ・グループを定義することもできますが、その場合キャッシュ表にコミットされた更新は、キャッシュされたOracle Database表に手動で伝播またはフラッシュします。

    また、すべての表を対象とした同期的な自動伝播と自動リフレッシュの両方を使用するキャッシュ・グループを定義することもできます。

    ユーザー管理キャッシュ・グループの詳細は、「ユーザー管理キャッシュ・グループ」を参照してください。

TimesTenデータベースとOracle Database間での更新の送信

TimesTenキャッシュ表とキャッシュされたOracle Database表との間でコミットされた更新を転送すると、2つのデータベースでこれらの表の同期が確保されます。

図1-4に示すように、伝播およびフラッシュとは、TimesTenデータベースのキャッシュ表にコミットされた更新をOracle Databaseのキャッシュ表に送信する処理のことです。フラッシュは手動での処理であり、伝播は自動での処理です。

ロード、リフレッシュおよび自動リフレッシュとは、Oracle Databaseのキャッシュ表にコミットされた更新をTimesTenデータベースのキャッシュ表に送信する処理のことです。ロードおよびリフレッシュは手動での処理となり、自動リフレッシュは自動での処理となります。

ユーザー管理キャッシュ・グループに対してのみ発行可能なFLUSH CACHE GROUP文の詳細は、「ユーザー管理キャッシュ・グループのフラッシュ」を参照してください。

AWTキャッシュ・グループおよびSWTキャッシュ・グループに対する伝播操作の処理方法の詳細は、「ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループ」および「SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループ」をそれぞれ参照してください。

LOAD CACHE GROUP文およびREFRESH CACHE GROUP文の詳細は、「キャッシュ・グループのロードおよびリフレッシュ」を参照してください。

自動リフレッシュ処理の詳細は、「AUTOREFRESHキャッシュ・グループ属性」を参照してください。

図1-4 TimesTenデータベースとOracle Database間でのコミットされた更新の送信

図1-4の説明が続きます。
「図1-4 TimesTenデータベースとOracle Database間でのコミットされた更新の送信」の説明

キャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループ

キャッシュ・グループは、明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループのいずれかにカテゴリ化されます。

明示的にロードされるキャッシュ・グループでは、キャッシュ・インスタンスはOracle DatabaseからTimesTenキャッシュ表にロード処理またはリフレッシュ処理によって手動でロードするか、または自動リフレッシュ処理を使用して自動的にロードします。キャッシュ表に対して問合せなどの処理を実行すると、事前に該当するキャッシュ表がロードされます。明示的にロードされるキャッシュ・グループが適しているのは、キャッシュするデータ・セットが静的であり、アプリケーションがキャッシュ表に対して処理を実行する前にそのデータ・セットを定義しておくことができる場合です。デフォルトでは、キャッシュ・グループは動的であると定義しないかぎり、明示的にロードされます。

動的キャッシュ・グループでは、キャッシュ・インスタンスはOracle DatabaseからTimesTenキャッシュ表に動的ロード処理を使用してリクエストに応じてロードするか、またはロード処理を使用して手動でロードします。動的キャッシュ・グループに対して手動リフレッシュ処理または自動リフレッシュ処理を実行すると、既存のキャッシュ・インスタンスを更新または削除できますが、キャッシュされていないOracle Databaseデータに対して更新をコミットしても新しいキャッシュ・インスタンスはキャッシュ表にロードされません。動的キャッシュ・グループが適しているのは、キャッシュするデータ・セットが少量であり、アプリケーションがキャッシュ表に対して処理を実行する前にOracle Databaseからそのデータ・セットを事前ロードしておく必要がない場合です。

キャッシュ・グループのロード処理とリフレッシュ処理の詳細は、「TimesTenデータベースとOracle Database間での更新の送信」を参照してください。

明示的にロードされるキャッシュ・グループに対してロード処理およびリフレッシュ処理を実行する場合と、同じ処理を動的キャッシュ・グループに対して実行する場合の相違の詳細は、「キャッシュ・グループのロードおよびリフレッシュ」を参照してください。

動的ロード処理の詳細は、「キャッシュ・インスタンスの動的ロード」を参照してください。

どのキャッシュ・グループ・タイプ(読取り専用、AWT、SWT、ユーザー管理)も、明示的にロードされるキャッシュ・グループとして定義できます。AUTOREFRESHキャッシュ・グループ属性とPROPAGATEキャッシュ表属性の両方を使用するユーザー管理キャッシュ・グループを除いて、すべてのキャッシュ・グループ・タイプを動的キャッシュ・グループとして定義できます。

動的キャッシュ・グループの詳細は、「動的キャッシュ・グループ」を参照してください。

キャッシュ・グリッド間でのデータの共有: ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ

キャッシュ・グループは、明示的にロードされるか動的かの他に、ローカルかグローバルかのいずれかに分類されます。

ローカル・キャッシュ・グループでは、キャッシュ表のデータは、TimesTenデータベースが同じキャッシュ・グリッドのメンバーであってもTimesTenデータベース間で共有されません。したがって、キャッシュ・インスタンスは特定のグリッド・メンバーにローカルであるため、データベースに重複しているデータがあってもかまいません。TimesTenキャッシュ表にコミットされた更新は、他のグリッド・メンバーとの調整がないまま、キャッシュされたOracle Database表に伝播されます。いずれのキャッシュ・グループ・タイプも、ローカル・キャッシュ・グループとして定義できます。ローカル・キャッシュ・グループは、明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループのいずれかに定義できます。ローカル・キャッシュ・グループの使用が適しているのは、参照データが頻繁に読み込まれ、すべてのグリッド・メンバーに存在可能である場合、および最適な同時実行性およびスループットを実現するために非結合データが論理的にパーティション化されている場合です。デフォルトでは、キャッシュ・グループはグローバルであると定義しないかぎり、ローカルとなります。

グローバル・キャッシュ・グループでは、キャッシュ表のデータが、同じキャッシュ・グリッドのメンバーであるTimesTenデータベース間で共有されます。複数のグリッド・メンバーの同じデータに更新をコミットした場合は、グリッドのメンバー間で読取り/書込みデータ一貫性を確保するために、更新内容がグリッド内での発行順にOracle Databaseに伝播されます。

動的なAWTキャッシュ・グループおよび明示的にロードされたAWTキャッシュ・グループは、グローバル・キャッシュ・グループとして定義できます。新しいキャッシュ・インスタンスは、リクエストに応じて、グローバル・キャッシュ・グループのキャッシュ表にロードされます。動的なAWTグローバル・キャッシュ・グループに対する問合せには、問合せが行われたローカル・グリッド・メンバー、リモート・グリッド・メンバーまたはOracle Databaseからのデータで対応できます。明示的にロードされたAWTキャッシュ・グループに対する問合せには、ローカル・グリッド・メンバーまたはリモート・グリッド・メンバーからのデータで対応できます。グローバル・キャッシュ・グループの使用が適しているのは、グリッドのメンバーとOracle Databaseとの間でデータの一貫性を確保するために、更新可能なデータにアクセスしたり、更新可能なデータが存在できるグリッド・メンバーが一度に1つにかぎられる場合です。

グローバル・キャッシュ・グループの作成と使用の詳細は、「グローバル・キャッシュ・グループ」を参照してください。

キャッシュ・グループ・タイプの概要

図1-5の表に、キャッシュ・グループの作成時にユーザーが使用できるキャッシュ・グループのタイプ、カテゴリおよび分類の有効な組合せの概要を示します。キャッシュ・グループ・カテゴリによって、キャッシュ・グループへのデータのロード方法が決まります。キャッシュ・グループ分類によって、キャッシュ・グループのデータがキャッシュ・グリッド間で共有できるかどうかが決まります。

どのキャッシュ・グループ・タイプにも、明示的にロードされるローカル・キャッシュ・グループまたは動的なローカル・キャッシュ・グループを作成できます。グローバル・キャッシュ・グループは、カテゴリおよびタイプが動的AWTまたは明示的にロードされたAWTであるキャッシュ・グループにのみ作成できます。

図1-5 キャッシュ・グループのタイプおよびカテゴリの概要

図1-5の説明が続きます。
「図1-5 キャッシュ・グループのタイプおよびカテゴリの概要」の説明

キャッシュの高可用性ソリューション

Oracle Databaseへの接続性を維持しつつ、キャッシュ表の高可用性を実現し、フェイルオーバーおよびリカバリが容易になるように、TimesTen Application-Tier Database Cacheを構成できます。TimesTenデータベースをアクティブ・スタンバイ・ペアのレプリケーション・スキームに参加させると、読取り専用キャッシュ・グループまたはAWTキャッシュ・グループでキャッシュ表の高可用性を実現できます。

アクティブ・スタンバイ・ペアを構成すると、TimesTenデータベースの高可用性を実現できます。グリッド・メンバーを複数配置すると、TimesTenキャッシュ・グリッドの高可用性を実現できます。Oracle Real Application Clusters(Oracle RAC)およびData Guardを構成すると、Oracle Databaseの高可用性を実現できます。

キャッシュ表のレプリケーションの構成の詳細は、「キャッシュ表のレプリケート」を参照してください。

TimesTen Application-Tier Database CacheおよびOracle RACの詳細は、「Oracle RAC環境でのTimesTen Application-Tier Database Cacheの使用」を参照してください。

TimesTen Application-Tier Database CacheおよびData Guardの詳細は、「Data Guardと連携したTimesTen Application-Tier Database Cacheの使用」を参照してください。