ネームスペースとデータベース
この章では、Caché でデータとコードがどのように編成されるのかを説明します。項目は以下のとおりです。
“習得する必要がある役立つスキル” の章には、ネームスペースの構成、マッピングの定義、コードとデータの移動などの情報が含まれています。
ネームスペースとデータベースの概要
Caché では、どのコードも、論理エンティティであるネームスペースで実行されます。ネームスペースはデータとコードへのアクセスを提供し、それらは (通常) 複数のデータベースに格納されています。データベースは、ファイル (CACHE.DAT ファイル) です。Caché は、ユーザが使用するための一連のネームスペースとデータベースを提供し、ユーザは追加のネームスペースとデータベースを定義できます。
ネームスペースでは、以下のオプションを使用できます。
-
ネームスペースには、コードを格納するための既定のデータベースがあります。それが、そのネームスペースのルーチン・データベースです。
ユーザがネームスペースでコードを作成する場合、他の考慮事項がない限り、コードはそのルーチン・データベースに格納されます。同様に、ユーザがコードを呼び出す場合、他の考慮事項がない限り、Caché によってそのデータベースでコードが検索されます。
-
ネームスペースには、ユーザが作成する永続クラスとグローバルのデータを格納するための既定のデータベースもあります。これが、そのネームスペースのグローバル・データベースです。
したがって、例えば、ユーザがデータに (任意の方法で) アクセスする場合、他の考慮事項がない限り、Caché によってそのデータベースからそれが取得されます。
グローバル・データベースはルーチン・データベースと同じデータベースでもかまいませんが、多くの場合、別のデータベースにしたほうが管理の面で便利です。
-
ネームスペースには、一時的なストレージ用の既定のデータベースがあります。
-
ネームスペースには、他のデータベースに格納されている追加のデータとコードへのアクセスを提供するマッピングを含めることができます。具体的には、既定以外のデータベースに格納されているルーチン、クラス・パッケージ、グローバル全体、および特定のグローバル・ノードを参照するマッピングを定義できます。(これらの種類のマッピングは、それぞれ、ルーチン・マッピング、パッケージ・マッピング、グローバル・マッピングおよび添え字レベル・マッピングと呼ばれます。)
マッピングを使用してデータベースへのアクセスを提供する場合は、そのデータベースの一部のみに対するアクセスを提供します。ネームスペースから、そのデータベースのマップされていない部分へは、読み取り専用方式でもアクセスできません。
また、マッピングを定義するときは、それがネームスペースの構成にのみ作用することを理解してください。それによって、コードやデータの現在の場所が変わることはありません。したがって、マッピングを定義するときは、コードやデータ (存在する場合) を、その現在の場所から、ネームスペースによって予期される場所に移動することも必要です。
マッピングの定義は、データベース管理タスクです。クラスやテーブル定義、あるいはアプリケーション・ロジックを変更する必要はありません。
詳細は、“習得する必要がある役立つスキル” の章を参照してください。
-
作成するネームスペースはどれでも、Caché コード・ライブラリの大部分にアクセスできます。このコードを使用できるのは、Caché によって、ユーザが作成するネームスペース専用のマッピングが自動的に確立されるためです。
このドキュメントでは、これらのクラスのいくつかについて述べました。特定の用途のツールを見つけるには、"インターシステムズ・プログラミング・ツールの索引" を使用してください。
マッピングは、データとコードを共有するための便利で強力な手段を提供します。どのデータベースも、複数のネームスペースから使用できます。例えば、この章で後述する、すべての顧客ネームスペースからアクセスできるいくつかのシステム・データベースがあります。
ネームスペースの構成は、定義した後に変更でき、Caché は、1 つのデータベースから別のデータベースにコードとデータを移動するためのツールを備えています。したがって、必要であれば、開発中にコードとデータを再編成することができます。これにより、(スケーリングなど) Caché アプリケーションの再構成が簡単に実行できます。
ロック、グローバル、およびネームスペース
グローバルは複数のネームスペースからアクセスできるため、Caché は、グローバルのロック・メカニズム用に、自動クロスネームスペース・サポートを提供しています。特定のグローバルに対するロックは、そのグローバルを格納しているデータベースを使用するすべてのネームスペースに自動的に適用されます。
ロックの概要は、このドキュメントで前述した “ロックと並行処理の制御” を参照してください。
データベースの基本事項
Caché データベースは CACHE.DAT ファイルです。データベースは、管理ポータルを使用して作成します。また、既存の Caché データベースがある場合は、それが認識されるように Caché を構成できます。
データベース構成
どのデータベースに対しても、Caché では、以下の構成詳細が必要です。
-
データベースの論理名。
-
CACHE.DAT ファイルが配置されているディレクトリ。管理ポータルでデータベースを作成するときに、システム管理者用ディレクトリ (cache-install/Mgr) 内のサブディレクトリを選択するか作成するように求められますが、データベース・ファイルは、便利なディレクトリであればどこにでも格納できます。
Tip:論理名と、CACHE.DAT ファイルが格納されるディレクトリに同じ文字列を使用すると便利です。システム提供の Caché データベースは、この規則に従っています。
追加のオプションは以下のとおりです。
-
このデータベースによって使用されるファイル・ストリームに使用するための既定のディレクトリ。
このディレクトリへの書き込みアクセスがユーザに必要となるため、これは重要です。書き込みアクセスできない場合、コードでファイル・ストリームを作成できなくなります。
-
新しいグローバルの照合。
-
初期サイズと他の物理的特徴。
-
ジャーナリング を有効または無効にするオプション。ジャーナリングは、障害後の最新状態へのリカバリや、システム・リカバリ中のデータのリストアのために、Caché データベースに行われた変更を記録します。
多くの場合、ジャーナリングを有効にすると役立ちます。ただし、指定された一時作業領域に対しては、ジャーナリングを無効にする場合があります。例えば、CACHETEMP データベースはジャーナリングしません。
-
読み取り専用として使用するためにこのデータベースをマウントするオプション。
読み取り専用データベースにグローバルを設定しようとすると、Caché によって <PROTECT> エラーが返されます。
多くの場合、システムが実行している間に、データベースの属性を作成、消去、または修正できます。
データベースの特徴
各データベースで、Caché は、実際のデータと、それを編成するメタデータの両方に対して物理的整合性を保証します。この整合性は、データベースへの書き込み中にエラーが発生した場合でも保証されます。
データベースは、手動で操作しなくても、必要に応じて自動的に拡張されます。特定のデータベースのサイズの増大が予想され、どれくらい大きくなるのか判別できる場合は、その初期サイズを、予想される最終的なサイズに近い値に設定することで“事前に拡張”できます。そのようにすると、パフォーマンスが向上します。
Caché には、高可用性と復元可能性を実現するいくつかの方法があります。これには、以下のものがあります。
-
ジャーナリング — 前述のとおりです。
-
ミラーリング — 2 つの Caché システム間における、迅速で、信頼性の高い、強固な自動フェイルオーバーを提供し、ミラーリングは企業にとって理想的な自動フェイルオーバー高可用性ソリューションとなります。
-
シャドウイング — この機能を使用すると、プライマリ・サーバのジャーナルを読み取って、データベースの変更を、そのデータベースのそれ自体のコピーに適用することで、1 つの Caché データベース・サーバが別のデータベース・サーバを“シャドウイング”できます。 これは、本当のレプリケーションではありませんが、短い待ち時間が許容される場合は緊急のフェイルオーバーのために使用できます。
-
クラスタリング — クラスタリングを提供するオペレーティング・システムに対して、その完全なサポートを提供します。
Caché は、複数のシステム間で、データ、アプリケーション・ロジック、および処理を分散するテクノロジを備えています。これは、ECP (エンタープライズ・キャッシュ・プロトコル) と呼ばれます。マルチサーバ・システムでは、Caché データベース・サーバのネットワークは共有リソースとして構成でき、それらの間でデータをシームレスに分散して、データ・ストレージとアプリケーションの処理を共有できます。これにより、高い拡張性と、自動フェイルオーバーおよびリカバリが実現されます。
データベースの移植性
Caché データベースは、複数のプラットフォーム間およびバージョン間で移植可能ですが、以下の注意事項があります。
-
さまざまなプラットフォームで、ファイルはどれもビッグ・エンディアン (最上位のバイトが先頭) とリトル・エンディアン (最下位のバイトが先頭) のいずれかです。
Caché には、Caché データベースのバイト・オーダーを変換するユーティリティ cvendian があります。2 つのタイプのプラットフォーム間でデータベースを移動する際に役立ちます。詳細は、"Caché 専用のシステム/ツールおよびユーティリティ" の “cvendian を使用したビッグ・エンディアン・システムとリトル・エンディアン・システム間の変換” のセクションを参照してください。
-
Caché の Unicode バージョンを使用してデータベースを作成する場合、8 ビットの Caché インストールでそのデータベースを使用しようとすると、データが失われることがあります。それは、そのインストールでは、16 ビットの文字データを取得できないためです。
ただし、8 ビットのデータベースを Unicode インストールで使用することはできます。
-
Caché の 8 ビット・バージョンを使用する場合、ユーザのデータを、異なる文字セットを使用する 8 ビット・ロケールに移植することはできません。
-
データベースに Caché の旧リリースのコードが含まれていても、そのコードは新しいバージョンの Caché で使用できます。
場合によっては、変更を加える必要があります。インターシステムズは、あるバージョンの Caché で記述されたアプリケーションを後続のバージョンで変更せずに実行できるようにする努力をしていますが、例外もあります。
-
データベースに、長い文字列を有効にして作成されたコードまたはデータが含まれている場合、そのデータベースは、長い文字列が有効化されていない Caché システムで使用できないことがあります。詳細は、このドキュメントで後述する “サーバ構成オプション” の章を参照してください。
システム提供データベース
Caché では、以下のデータベースが提供されます。
-
CACHELIB — これは、読み取り専用データベースであり、オブジェクト、データ型、ストリーム、コレクション・クラス、および多数の他のクラス定義が含まれます。また、システム・インクルード・ファイル、生成された INT コード (大部分のクラスの場合)、および生成された OBJ コードも含まれます。
-
CACHESYS (システム管理者用データベース) — このデータベースには、システム管理に関連するユーティリティおよびデータが含まれています。これは、ユーザ固有のカスタム・コードおよびデータを格納することと、更新時にそのコードおよびデータを保持することを目的としています。
このデータベースには、以下が含まれます (含めることができます)。
-
ユーザやロールなどのセキュリティ要素 (事前定義項目とユーザが追加する項目の両方)。
セキュリティ上の理由により、管理ポータルでは、このデータは他のデータとは異なる扱いになります。例えば、ユーザとそのパスワードのテーブルは表示できません。
-
NLS (各国言語サポート) クラスが使用するデータ (数の形式、文字のソート順序、その他の詳細)。追加のデータをロードできます。
-
独自のコードおよびデータ。更新時にこれらの項目が保持されるようにするには、この章で後述する “CACHESYS のカスタム項目” の名前付け規約を使用します。
Caution:このデータベースの移行、置き換え、または削除はサポートされていません。
このデータベースが配置されるディレクトリは、システム管理者用ディレクトリです。コンソール・ログ (cconsole.log) は、他のログ・ファイルと同様に、このディレクトリに書き込まれます。
-
-
CACHE — キャッシュされた SQL クエリや CSP セッション情報などの項目が格納されます。
Note:アプリケーションが CACHE データベースと直接やり取りすることのないようにしてください。
-
CACHEAUDIT — イベントの記録を有効にすると、Caché によって監査データがこのデータベースに書き込まれます。
-
CACHETEMP — これは、Caché によって一時ストレージ用に使用され、ユーザも同じ用途に使用できます。このデータベースは、システムの再起動のたびに再初期化されます。MaxCacheTempSizeAtStart CPF キーワードも参照してください。このデータベースはジャーナリングされない点に注意してください。
-
DOCBOOK — このデータベースには、DocBook アプリケーションによってビューワに提供されるドキュメントが格納されます。
-
SAMPLES — このデータベースにはコード・サンプルが格納されます。
-
USER — このデータベースは空で、ユーザが使用するために予約されています。他のデータベースとは異なり、このデータベースには、最初のインストール後は、インストーラがアクセスすることはありません。
CACHESYS および SAMPLES の詳細は、"Caché セキュリティ管理ガイド" の “アセットおよびリソース” の章を参照してください。
システム提供ネームスペース
Caché は、ユーザが直接使用するための以下のネームスペースを提供します。
-
%SYS — このネームスペースは、一部のネームスペースでのみ使用可能なコード (セキュリティ要素、サーバ構成などを操作するコード) へのアクセスを提供します。
このネームスペースの場合、既定のルーチン・データベースおよび既定のグループ・データベースは、CACHESYS です。特定の名前付け規約に従う場合、独自のコードとグローバルをこのネームスペースに作成し、それをそのデータベースに格納できます。次のセクションを参照してください。
-
DOCBOOK — DocBook アプリケーションはこのネームスペースを使用します。
-
SAMPLES — このネームスペースは、SAMPLES データベースへのアクセスを提供します。
-
USER — このネームスペースは、USER データベースへのアクセスを提供します。
Caché は、他のネームスペースを独自の目的のために使用します。"Caché システム管理ガイド" の “ネームスペースの構成” を参照してください。
CACHESYS のカスタム項目
CACHESYS データベースに項目を作成できます。Caché アップグレードをインストールすると、このデータベースがアップグレードされます。このアップグレード中に、カスタム項目の名前付け規約に従っていないと、いくつかの項目が削除されます。
項目が上書きされないようにこのデータベースにコードまたはデータを追加するには、以下のいずれかを実行します。
-
%SYS ネームスペースに移動し、項目を作成します。このネームスペースの場合、既定のルーチン・データベースおよび既定のグループ・データベースは、どちらも CACHESYS です。以下の名前付け規約を使用して、項目がアップグレード・インストールの影響を受けないようにします。
-
クラス : パッケージを Z または z で始めます。
-
ルーチン : 名前を Z、z、%Z、または %z で始めます。
-
グローバル : 名前を ^Z、^z、^%Z、または ^%z で始めます。
-
-
どのネームスペースでも、以下の名前で項目を作成します。
-
ルーチン : 名前を %Z または %z で始めます。
-
グローバル : 名前を ^%Z または ^%z で始めます。
ネームスペースの標準マッピングにより、これらの項目は CACHESYS に書き込まれます。
-
MAC コードとインクルード・ファイルはアップグレードによる影響を受けません。
ネームスペースで何にアクセス可能か
ネームスペースを作成すると、システムによってそのネームスペースに対するマッピングが自動的に定義されます。その結果、そのネームスペース内で以下の項目を使用できるようになります (これらの項目に対する適切な許可を所持するユーザとしてログインした場合)。
-
パッケージ名がパーセント記号 (%) で始まるクラス。これには、Caché で提供されるクラスの大部分が含まれますが、すべてではありません。
-
このネームスペース用のルーチン・データベースに格納されているすべてのコード。
-
このネームスペース用のグローバル・データベースに格納されているすべてのデータ。
-
名前がパーセント記号で始まるルーチン。
-
名前がパーセント記号で始まるインクルード・ファイル。
-
名前がキャラットおよびパーセント記号 (%) で始まるグローバル。このようなグローバルは、一般的にパーセント・グローバルと呼ばれます。グローバル・マッピングまたは添え字レベル・マッピングを使用すれば、パーセント・グローバルを格納する場所を変更できますが、これらの表示には影響しません。パーセント・グローバルはすべてのネームスペースで常に表示されます。
-
^CacheTempUser で始まる名前を持つユーザ自身のグローバル。例えば、^CacheTempUser.MyApp。そのようなグローバルを作成すると、それらのグローバルは CACHETEMP データベースに書き込まれます。
-
このネームスペースで定義されたマッピングによって使用可能になる追加のコードまたはデータ。
コードは、拡張されたグローバル参照を使用して、他のネームスペースで定義されたグローバルにアクセスできます。詳細は、"Caché グローバルの使用法" の “グローバル構造” を参照してください。
Caché セキュリティ・モデルは、ユーザがアクセスできるデータとコードを制御します。概要は、“Caché セキュリティ” の章を参照してください。
ネームスペースのシステム・グローバル
ネームスペースには、追加のシステム・グローバルが含まれ、それらは大まかに以下の 2 つのカテゴリに分類されます。
-
すべてのネームスペースに存在するシステム・グローバル。これらには、Caché によってユーザのルーチン、クラス定義、インクルード・ファイル、INT コード、および OBJ コードが格納されるグローバルが含まれます。
-
特定の Caché 機能を使用するときに作成されるシステム・グローバル。例えば、ネームスペースで DeepSee を使用する場合、システムによって DeepSee が使用する一連のグローバルが作成されます。
ほとんどの場合、これらのグローバルは、いずれも手動で書き込みしたり削除しないでください。"Caché グローバルの使用法" の “グローバルの名前付け規約” を参照してください。
システム・ディレクトリ
どのネームスペースでも、ファイル・ストリームを作成すると、Caché によって既定のディレクトリにファイルが書き込まれ、それが後で削除されます。
このディレクトリへの書き込みアクセスがユーザに必要となるため、これは重要です。書き込みアクセスできない場合、コードでファイル・ストリームを作成できなくなります。
既定のディレクトリは、そのネームスペースのグローバル・データベースの stream サブディレクトリです。
詳細
この章で説明したトピックの詳細は、以下を参照してください。
-
このドキュメントで後述する “習得する必要がある役立つスキル” には、ネームスペースとデータベースの定義に関する情報が記載されています。
-
"Caché グローバルの使用法" には、拡張参照の使用を含む、グローバルの操作に関する情報が記載されています。
-
"Caché 専用のシステム/ツールおよびユーティリティ" の “cvendian を使用したビッグ・エンディアン・システムとリトル・エンディアン・システム間の変換” には、cvendian に関する情報が記載されています。
-
"Caché 高可用性ガイド" には、高可用性と復元可能性に関する情報が記載されています。
-
"Caché 分散データ管理ガイド" には、ECP (エンタープライズ・キャッシュ・プロトコル) に関する情報が記載されています。