TimesTen Application-Tier Database Cache (TimesTen Cache)は、TimesTen In-Memory Databaseで使用できるOracle Database製品オプションです。これはアプリケーション層でデータベース・キャッシュとして使用され、Oracle DatabaseデータをキャッシュしてOracle Databaseでのワークロードを削減します。また、Oracle DatabaseとTimesTenデータベース間の接続とデータ転送を可能にし、TimesTenデータベースに流れる大量のイベントの取得と処理、および後続データのOracle Databaseへの転送も簡単になります。
キャッシュ・グループ内でTimesTenデータベースにOracle Databaseデータをキャッシュできます。TimesTenデータベースのキャッシュ・グループでは、単一のOracle Database表または関連する一連のOracle Database表をキャッシュできます。
この章の内容は次のとおりです。
キャッシュ・グループでは、TimesTenデータベースにキャッシュするOracle Databaseデータを定義します。キャッシュ・グループを定義して、単一のOracle Database表のすべてかその一部または一連の関連付けられたOracle Database表をキャッシュできます。
図1-1に、単一のOracle Database表customer
のサブセットをキャッシュするtarget_customers
というキャッシュ・グループを示します。
1つのルート表および1つ以上の子表を定義すると、複数のOracle Database表を同じキャッシュ・グループにキャッシュできます。キャッシュ・グループには、ルート表を1つのみ含めることができます。
複数の表を持つキャッシュ・グループでは、各子表が外部キー制約を使用して同じキャッシュ・グループ内のルート表または別の子表を参照する必要があります。複数表のキャッシュ・グループ内の表は外部キー制約を介してTimesTenデータベースで互いに関連している必要がありますが、対応する表が必ずしもOracle Databaseで互いに関連している必要はありません。ルート表は外部キー制約のある表を参照しません。複数表のキャッシュ・グループの特性の詳細は、「複数表のキャッシュ・グループ」を参照してください。
同じOracle Databaseと対話する複数のTimesTenデータベースを作成できますが、それぞれが独立して動作します。そのため、別個のTimesTenデータベースにキャッシュされたデータは、Oracle Databaseと個別に対話します。
1つのOracle Database表を、同じTimesTenデータベースにある別々のキャッシュ・グループにキャッシュすることはできません。ただし、異なるTimesTenデータベースにある別々のキャッシュ・グループにキャッシュすることは可能です。別々のAWTキャッシュ・グループに表がキャッシュされており、同じキャッシュ・インスタンスが複数のTimesTenデータベースで同時に更新された場合、キャッシュされたOracle Database表にこの更新が伝播される順序は保証されません。また、個々のTimesTenデータベースで、更新されたキャッシュ表の内容に一貫性がなくなります。
データは、キャッシュ・インスタンスと呼ばれる単位でOracle DatabaseからTimesTenデータベース内のキャッシュ・グループにロードされます。キャッシュ・インスタンスは、子表の関連行のセットとともにキャッシュ・グループのルート表の単一行として定義されます。
図1-2に、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つ
よく使用されるキャッシュ・グループのタイプは、次のとおりです。
読取り専用キャッシュ・グループ
読取り専用キャッシュ・グループでは、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表との間でコミットされた更新を転送すると、2つのデータベースでこれらの表の同期が確保されます。
図1-3に示すように、伝播およびフラッシュとは、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-3 TimesTenデータベースとOracle Database間でのコミットされた更新の送信
キャッシュ・グループは、明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループのいずれかにカテゴリ化されます。
明示的にロードされるキャッシュ・グループでは、キャッシュ・インスタンスはOracle DatabaseからTimesTenキャッシュ表にロード処理またはリフレッシュ処理によって手動でロードするか、または自動リフレッシュ処理を使用して自動的にロードします。キャッシュ表に対して問合せなどの処理を実行すると、事前に該当するキャッシュ表がロードされます。明示的にロードされるキャッシュ・グループが適しているのは、キャッシュするデータ・セットが静的であり、アプリケーションがキャッシュ表に対して処理を実行する前にそのデータ・セットを定義しておくことができる場合です。デフォルトでは、キャッシュ・グループは動的であると定義しないかぎり、明示的にロードされます。
動的キャッシュ・グループでは、キャッシュ・インスタンスはOracle DatabaseからTimesTenキャッシュ表に動的ロード処理を使用してリクエストに応じてロードするか、またはロード処理を使用して手動でロードします。動的キャッシュ・グループに対して手動リフレッシュ処理または自動リフレッシュ処理を実行すると、既存のキャッシュ・インスタンスを更新または削除できますが、キャッシュされていないOracle Databaseデータに対して更新をコミットしても新しいキャッシュ・インスタンスはキャッシュ表にロードされません。動的キャッシュ・グループが適しているのは、キャッシュするデータ・セットが少量であり、アプリケーションがキャッシュ表に対して処理を実行する前にOracle Databaseからそのデータ・セットを事前ロードしておく必要がない場合です。
キャッシュ・グループのロード処理とリフレッシュ処理の詳細は、「TimesTenデータベースとOracle Database間での更新の送信」を参照してください。
明示的にロードされるキャッシュ・グループに対してロード処理およびリフレッシュ処理を実行する場合と、同じ処理を動的キャッシュ・グループに対して実行する場合の相違の詳細は、「キャッシュ・グループのロードおよびリフレッシュ」を参照してください。
動的ロード処理の詳細は、「キャッシュ・インスタンスの動的ロード」を参照してください。
どのキャッシュ・グループ・タイプ(読取り専用、AWT、SWT、ユーザー管理)も、明示的にロードされるキャッシュ・グループとして定義できます。AUTOREFRESH
キャッシュ・グループ属性とPROPAGATE
キャッシュ表属性の両方を使用するユーザー管理キャッシュ・グループを除いて、すべてのキャッシュ・グループ・タイプを動的キャッシュ・グループとして定義できます。
動的キャッシュ・グループの詳細は、「動的キャッシュ・グループ」を参照してください。
Oracle Databaseへの接続性を維持しつつ、キャッシュ表の高可用性を実現し、フェイルオーバーおよびリカバリが容易になるように、TimesTen Cacheを構成できます。TimesTenデータベースをアクティブ・スタンバイ・ペアのレプリケーション・スキームに参加させると、読取り専用キャッシュ・グループまたはAWTキャッシュ・グループでキャッシュ表の高可用性を実現できます。
アクティブ・スタンバイ・ペアを構成すると、TimesTenデータベースのフォルト・トレランスを実現できます。Oracle Real Application Clusters(Oracle RAC)およびData Guardを構成すると、Oracle Databaseの高可用性を実現できます。
キャッシュ表のレプリケーションの構成の詳細は、「キャッシュ表のレプリケート」を参照してください。
TimesTen CacheおよびOracle RACの詳細は、Oracle RAC環境でのTimesTen Cacheの使用を参照してください。
TimesTen CacheおよびData Guardの詳細は、Data Guardと連携したTimesTen Cacheの使用を参照してください。