Caché データベース・エンジンは、Caché の心臓部分です。データベース・エンジンは、パフォーマンス、同時実行、スケーラビリティ、信頼性を最適化します。サポートされるプラットフォームによって最大限のパフォーマンスを獲得するために、プラットフォーム特有の高度な最適化が行われています。
Caché は、フル機能のデータベース・システムです。基幹アプリケーション (ジャーナリング、バックアップ、リカバリ、管理ツールなど) を実行するために必要なすべての機能が含まれています。処理負荷を軽減するために、Caché は、他のデータベース製品よりデータベース管理が簡単になるように設計されています。したがって、導入された大半の Caché システムでは、データベース管理者は必要ありません。
データベース・エンジンの主機能は、以下のセクションで説明しています。
Caché のすべてのデータは、まばらな多次元配列に格納されます。標準の OLAP (オンライン解析処理) 製品で使用される多次元配列と異なり、Caché は、多次元構造で、トランザクション処理操作 (挿入、更新、ロック、トランザクション) をサポートします。また、大半の OLAP エンジンと異なり、多次元構造は、使用可能なメモリ・サイズに制限されません。代わりに、Caché には、高度で効率的なデータ・キャッシュがあります。
Caché は完全可変長データをまばらな配列の形で格納するため、一般的なリレーショナル・データベースの半分程度の格納領域しか必要としません。ディスク容量が少なくて済むばかりでなく、コンパクトなデータ保存によって、一度の I/O 処理でより多くのデータの読み書きが可能となり、データがより効率良くキャッシュされるため、パフォーマンスが向上します。
Caché オブジェクトは、そのオブジェクト永続テクノロジーの基盤として多次元ストレージを使用します。例として、名前、ID 番号、勤務地の従業員データを持つ
Employee クラスがあります。
Employee オブジェクトのインスタンスは、ここで図示されているように、多次元配列で格納されます。
永続オブジェクトのストレージ
この場合、配列はオブジェクト識別子の値で添え字を付け、各インスタンスのデータは、配列ノードに簡潔に格納されます。Caché オブジェクトは、永続クラスに最適なストレージ構造を自動的に生成します。
Location (勤務地) プロパティのようにクロス・インデックスが必要な場合、永続エンジンは異なる多次元配列を使用し、以下の図のように、対応するオブジェクト識別子に勤務地の値を関連付けます (通常、二次元構造で実行されます)。
ストレージ・インデックス
これらのインデックスは、データベースが変更されると自動的に維持されます。Caché SQL エンジンは、このようなインデックスを自動的に使用して、勤務地で Employees を検索するクエリを実行します。
多次元配列により、データを格納する際のアプリケーションの柔軟性が大幅に向上しました。例えば、密接に関連するオブジェクト・セット、
Invoice オブジェクトとそれに対応する
LineItem オブジェクトの構造、
LineItem オブジェクトは
Invoice オブジェクトに物理的にクラスタされるように簡単に構成できるため、かなり効果的にアクセスできます。
添え字マッピング という独自の機能を使用すると、1 つ以上の配列内にあるデータを、どのようにして物理的なデータベース・ファイルにマップするかを指定できます。このようなマッピングは、データベース管理タスクです。クラスやテーブル定義、あるいはアプリケーション・ロジックを変更する必要はありません。また、マッピングは特定のまばらな配列内で行うこともできます。ある値の範囲を別の物理ロケーションにマップしたり、他のファイル、ディスク・ドライブ、あるいは他のデータベース・サーバにもマップしたりできます。これにより、(スケーリングなど) Caché アプリケーションの再構成が簡単に実行できます。
トランザクション多次元ストレージの柔軟性により、Caché は従来のリレーショナル・データベースを使用した二次元構造以上の利点があります。例えば、Caché は高性能の SQL、オブジェクト、XML データベースとして機能します。つまり、Caché アプリケーションは、テクノロジーの将来的な進歩により良く備えることができます。
Caché には、Caché プロセスでデータベース操作やあらゆる規模のビジネス・ロジックを実行する機能があります。
プロセス管理
プロセスとは、Caché サーバで稼動する Caché 仮想マシンのインスタンスです。通常の Caché サーバは、ハードウェアとオペレーティング・システムの性能によって、何千もの同時プロセスを実行できます。各プロセスは、多次元ストレージ・システムに直接アクセスします。
Caché 仮想マシンは、
P-code と呼ばれる命令を実行し、トランザクション処理とデータウェア・ハウジング・アプリケーションに必要なデータベースの入出力とロジック処理の性能を最適化します。以下は、仮想マシン・コードの生成方法です。
-
SQL Caché に発行される SQL クエリは、Caché SQL オプティマイザ で処理された後、効率的に実行可能 P-code に変換します (既存のインデックスを使用します)。
-
オブジェクトの振る舞い Caché オブジェクト・テクノロジーは、メソッド・ジェネレータ (事前に定義されたルールに沿ってコードを生成するオブジェクト・メソッド) を使用して、実行可能な P-code を自動的に生成することで、(オブジェクトの永続性など) サーバ側のオブジェクトの振る舞いを提供します。
-
Caché ObjectScript アプリケーションでは、Caché ObjectScript 言語を使用してあらゆるロジックを組み込み、Caché データあるいはアプリケーション・サーバで実行できます。このようなコードは、オブジェクト・メソッドの形式を取るか (オブジェクト指向のフル機能を使用できます。リレーショナル界に格納されたプロシージャに類似していますがそれ以上に強力です)、あるいは Caché サーバで実行する小規模プログラム、完全な
ルーチン を備えることができます。
-
Caché Basic オブジェクト・メソッドは、Basic プログラミング言語を使用しても実装できます。Caché には、世界中のソフトウェア開発者が一般的に使用している強力でオブジェクト・ベースの Basic プログラミング言語が含まれています。Caché Basic は、それぞれにサポートされたプラットフォームで実行し、Caché ObjectScript と完全に相互運用できます。
Caché で最も強力な機能の 1 つは、分散データ・ネットワークを構築するためにサーバを 1 つにリンクする機能です。このようなネットワークでは、主にデータを提供するマシンをデータ・サーバと言います。一方、処理がメインで、データをほとんど持たないマシンをアプリケーション・サーバと言います。
ECP (Enterprise Cache Protocol)
サーバは、Caché の ECP (Enterprise Cache Protocol ) を使用して、データ (とロック) を共有できます。ECP は、データをパッケージ化して転送することで転送効率を向上させています。ネットワーク経由でデータを要求された場合、必要なデータとそれに関連するデータをパッケージ化して返送します。オブジェクトと多次元データ・モデルを継承する特有のデータ・リレーションシップにより、要求された元のデータに関連する情報を識別し、取り込むことができます。
関連する 情報は、クライアントあるいはアプリケーション・サーバのどちらかのローカル・サーバでキャッシュされます。通常、データのアクセスは近くのキャッシング情報から先に検索を行い、ネットワーク上で不必要なデータ要求を行わないようにしています。クライアントがデータを更新した場合、変更されたデータのみをデータベース・サーバに転送します。
ECP により、アプリケーションは、多階層とピアツーピア通信を含む広範囲のランタイム構成をサポートできます。
整合性と信頼性を備えたデータベースにするため、Caché には、データベースの更新状況を物理的あるいは論理的に追跡するジャーナリング・サブシステムがあります。ジャーナル管理テクノロジーは、トランザクションのサポート (ジャーナルは、トランザクションのロールバック処理を実行) と、データベースのシャドウイング (ジャーナルは、シャドウ・サーバとプライマリ・データ・サーバの同期を取ります) にも使用します。他のサブシステムと同様に、Caché は、ジャーナリング・システムをアプリケーションの要件に合うように構成します。
同時データベース・アクセスをサポートするために、Caché には、強力なロック管理システムがあります。
数千のユーザをサポートするシステムでは、競合するプロセス間の衝突の削減は、パフォーマンスの向上に不可欠です。もっとも大きな競合は、同じデータをアクセスするトランザクション間にあります。Caché のロック管理には、このような衝突を削減する以下の機能があります。
-
アトミック処理 典型的なパフォーマンス・ホット・スポットを削除するため、Caché は、アプリケーション・レベルのロックが不要な複数のアトミック処理をサポートします。例えば、一意の値をオブジェクト識別あるいは行識別の最小単位で割り当てる機能です (リレーショナル・アプリケーションで共通のボトルネックです)。
-
論理ロック Caché は、更新中にデータのページ全体をロックしません。大半のトランザクションは、少量のデータへの頻繁なアクセスや変更であるため、Caché は、各オブジェクト(行)単位で取得する最小単位の論理ロックをサポートします。
-
分散ロック 分散データベース構成では、Caché は、自動的に分散ロックをサポートします。
Caché は、無数のデバイス (ファイル、TCP/IP、プリンタなど) をプラットフォームに依存せずにサポートします。このため、Caché アプリケーションは、他のテクノロジーのホストと相互運用できます。Caché で可能な相互接続オプション (CSP、ODBC、SOAP、Java など) は、この基本的な機能をサポートした上で構築されます。
Caché は、Windows (98、NT, 200、XP など)、OpenVMS、UNIX の各主要バージョンを含むさまざまなハードウェア・プラットフォームとオペレーティング・システムで稼動し、最適化されます。
Caché で開発したアプリケーションやデータをあるプラットフォームから別のプラットフォームへ簡単に移植できます。これは、Caché を新規のプラットフォームにインストールし、データベース・ファイルを新規システムに移植するのと同様に簡単です。システム間を移動する場合、(あるエンディアン表現を別の表現に変換するために) 組み込みのデータ変換ユーティリティを実行する必要があるかもしれません。
Caché は、アプリケーションを実稼動する際に、最大限の柔軟性を提供するさまざまなランタイム構成をサポートします。Caché のシステム設定を変更して、さまざまな稼動オプションを交互に使用できます。通常、アプリケーション・ロジックを変更する必要はありません。
単純なクライアント/サーバ構成では、単一の Caché データ・サーバは、多くのクライアント (アプリケーションとプラットフォームによって 1 から数千まで) を持ちます。
クライアント/サーバ構成
-
スタンドアロンのデスクトップ・システム。クライアント/サーバ・プロトコル (ODBC、ActiveX、JDBC、Java など) 経由で接続するクライアント・アプリケーションを実行します。
-
CSP (Caché Server Pages)、
SOAP、他の接続オプション (ODBC、JDBC など) を経由して Caché と会話する Web サーバ・プロセス。各 Web サーバ・プロセスは、多数のブラウザ・ベースあるいはマシン・ツー・マシンのセッションを提供します。
-
ODBC、JDBC などを経由して Caché に接続するミドル・ウェアのプロセス (Enterprise Java Bean アプリケーション・サーバなど)。
-
サポートされるプロトコル (TELNET、TCP/IP など) の 1 つを使用して Caché に接続するターミナルやハードウェアなどのデバイス。
-
上記の方法の中からの、いくつかの方法の組み合わせ。
シャドウ・サーバ構成とは、基本的なクライアント/サーバの設定に、1 つ以上のシャドウ・サーバを追加して構築されます。各シャドウ・サーバは、トランザクション・ジャーナルに接続し、監視することで、サーバ自身と、メイン・データ・サーバ内にあるデータとの同期を取ります。
シャドウ・サーバ構成
シャドウ・サーバは典型的には、一時的クエリ、大量のレポート、バッチ処理を行うために使用され、メイン・トランザクション・システムへの影響を制限します。また、フェイルオーバー・システムとしても使用できます。
多層構成は、Caché の分散データベース・テクノロジー (ECP) を使用して、大量のクライアントをシステムに接続できます。
多層構成
最も簡単な多層設定は、アプリケーション・サーバとして動作する 1 つ以上の Caché システムを、中央データ・サーバとさまざまなクライアント・システム間に配置します。この場合、アプリケーション・サーバはデータを格納せず、代わりに、データ・サーバの CPU をアンロードするクライアント特有の動作を実行するプロセスを収容します。この構成は、
参照の局所性 を示すアプリケーションに最適です。つまり、大半のトランザクションは関連するデータをある程度含んでいるため、アプリケーション・サーバ間のロックを小さくすることができます。(大半の Web アプリケーションのように) 適切な読み取りアクセス数を持つこのようなアプリケーションは、上記モデルの実行に最適です。
また、複数のデータ・サーバや、アプリケーション・サーバ・マシンに格納されたデータを持つといったさらに複雑な構成も可能です。
通常、アプリケーションは、(ホット・スタンドバイ・システムとして動作するアプリケーション・サーバで) 拡張性や高可用性のために多層構造を使用します。