Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

クラスへのストレージ定義の追加

永続クラスまたはシリアル・クラスで使用する物理的ストレージは、ストレージ定義で指定します。スタジオを使用すると、このようなストレージ定義を表示し、編集することができます。

Note:

ストレージ定義は、Caché オブジェクトのかなり高度な機能です。多くの場合は、ストレージ定義を操作する必要はありません。Caché クラス・コンパイラでは、永続オブジェクトのストレージ定義が自動的に作成され、管理されます。

ストレージ定義は、一般に以下のような場合に使用します。

  • パフォーマンスの調整など、永続オブジェクトで使用するストレージの詳細な制御が必要な場合

  • 既存のデータ構造の最上部に、オブジェクト定義をマッピングする場合

クラスには任意の数のストレージ定義を持つことができますが、一度に 1 つしか使用できません。新規のクラスは、a) クラスを保存しコンパイルするまで、または、b) 明示的に 1 つ追加するまでは、ストレージ定義を持つことはありません。[クラス]→[追加]→[ストレージ] を使用すると、クラスに新規のストレージ定義を追加できます。

Note:

クラスをコンパイルすると、そのストレージ定義が自動的に生成されます。永続クラスとシリアル・クラスだけに、ストレージ定義を作成できます。

スタジオでは、以下の 2 つの方法でクラスのストレージ定義を表示し、編集できます。

  • 視覚的に行う方法。クラス・インスペクタ・ウィンドウのストレージ・インスペクタを使用します。クラス・インスペクタで [ストレージ] を選択し、目的のストレージ定義を選択します。

  • テキストを使用する方法。クラス・エディタ・ウィンドウを使用します。ストレージ定義はクラス定義の本文にあります。

これらの方法は、この後のセクションで詳細に説明します。

クラスへのストレージ定義の追加

クラス定義に新規のストレージ定義を追加するには、以下の 2 つの方法があります。

  • クラス・エディタおよび [クラス]→[追加]→[ストレージ] を使用して、クラス定義にストレージ定義を追加する方法

  • 新規ストレージ・ウィザードを使用する方法

新規ストレージ・ウィザードを使用する方法

新規ストレージ・ウィザードを使用して、新規ストレージをクラス定義に追加できます。新規ストレージ・ウィザードを起動するには、[クラス]→[追加]→[ストレージ] を使用します。または、クラス・インスペクタで右クリックして [追加]→[ストレージ] を選択するか、ツールバーから [新規ストレージ] アイコン generated description: newstorageicon を選択することもできます。

新規ストレージ・ウィザードでは、情報の入力が促されます。[完了] ボタンはいつでも選択できます。指定していない情報には既定値が設定されます。

名前、タイプ、説明ページ

新規ストレージ・ウィザードでは、以下の情報の入力が促されます (これらの値は後で変更できます)。

ストレージ名

(必須) 新規ストレージ定義の名前。これは、有効なクラス・メンバ名である必要があります。また、定義済みの既存のストレージ定義と同じ名前を付けることはできません。

ストレージ・タイプ

(必須) ストレージ定義によって使用するストレージのタイプ。タイプは、どのストレージ・クラスによって、このクラスのストレージ・インタフェースを実装するかを指定します。以下が、その選択肢です。

  • Caché ストレージ — このストレージ定義は、%CacheStorageOpens in a new tab クラスをベースにします。これは、新規の永続クラスに使用される既定のストレージ・タイプです。

  • Caché SQL ストレージ — このストレージ定義は、%CacheSQLStorageOpens in a new tab クラスをベースにします。このストレージ・タイプは、ストレージ・オペレーションを実行する SQL 文を使用します。このストレージ・タイプは、オブジェクトを既存のデータ構造にマッピングするか、または Caché SQL ゲートウェイを経由してリモートの RDBMS と情報交換するのに使用します。

  • カスタム・ストレージ — このストレージ定義は、ユーザ定義のストレージ・クラスをベースにします。

説明

(オプション) 新規ストレージ定義に関する説明。

説明には、HTML フォーマット・タグを記述することもできます。詳細は、"Caché オブジェクトの使用法" の “クラスの定義とコンパイル” の章の “クラス・ドキュメントでの HTML マークアップの使用” を参照してください。

%CacheStorage 定義のグローバル特性ページ

%CacheStorageOpens in a new tab ストレージ定義の場合、新規ストレージ・ウィザードで、永続クラスのデータやインデックスを保存するのに使用するグローバル (永続多次元配列) の特性を指定します。ウィザードで指定する属性には、以下のものがあります。

DataLocation

グローバルの名前であり、永続クラスのインスタンスの保存に使用する文頭の添え字です。例えば、グローバル ^data にデータを保存するように指定するには、このフィールドに ^data と入力します。グローバル・サブノード ^data("main") にデータを保存するように指定するには、^data("main") と入力します。

IndexLocation

グローバルの名前であり、永続クラスのインデックス・エントリの保存に使用する文頭の添え字です。既定では、インデックスはインデックス名を基にした追加の添え字と共に、インデックス・リファレンス・グローバルに保存されます。これは、インデックスごとに上書きできます。

IdLocation

グローバルの名前であり、既定のオブジェクト ID カウンタを含むのに使用する文頭の添え字です。オブジェクト ID カウンタは、このタイプの次のオブジェクト・インスタンスの ID 番号を保持するのに使用されます。

クラス・インスペクタをストレージ定義で使用する

クラス・インスペクタを使用して、クラスのストレージ定義を視覚的に表示したり編集したりできます。クラス・インスペクタには、メソッドやプロパティの表示と同様にストレージ定義のリストが表示されます。

クラス・インスペクタで既存のストレージ定義を表示する方法は、以下のとおりです。

  1. クラス・インスペクタを選択します。

  2. インスペクタのメンバ・リスト・プルダウンで [Storage] を選択します。

  3. ストレージ定義をダブルクリックします。

これで、クラス・インスペクタにストレージ・キーワードとその値が表示されます。

Data Nodes

%CacheStorageOpens in a new tab ストレージ・クラスによって使用される一連のデータ・マッピング全体を表します。Data Nodes キーワードをダブルクリックして起動するデータ・ノード・エディタによって、ストレージ定義に対する一連のデータ・ノード仕様を表示し、編集することができます。つまり、クラスのプロパティがグローバル・ノードに保存される方法を直接指定できます。

SQL Storage Map

%CacheSQLStorageOpens in a new tab ストレージ・クラスによって使用される一連のデータ・マッピング全体を表します。SQL Storage Map キーワードをダブルクリックして起動する SQL ストレージ・マップ・エディタによって、オブジェクト・プロパティを既存のデータ構造にマップするのに使用される、一連のマッピングを表示し、編集することができます。

クラス・エディタをストレージ定義で使用する

クラス・エディタを使用して、クラスのストレージ定義を表示したり編集することができます。[ビュー]→[コードの展開] を使用すると、クラスのストレージ定義の表示を切り替えることができます。

ストレージ定義は、クラス定義の外部 XML 表示で使用されるのと同じ XML 要素を使用し、クラス定義の本文にインライン XML アイランドとして表示されます。

例えば、シンプルな MyApp.Person クラスを考慮してみましょう。

/// A simple persistent class
Class MyApp.Person Extends %Persistent 
{
Property Name As %String;
Property City As %String;
}

このクラスをコンパイルしたら、(クラス・コンパイラが、そのクラスに対するストレージ定義を生成したことを確認するため) [ビュー]→[コードの展開] を使用 (または、ブロックの最上行の隣にあるプラス・アイコンを選択) して、そのストレージ定義を表示します。これは、クラス・エディタ・ウィンドウで以下のように表示されます。

/// A simple persistent class
Class MyApp.Person Extends %Persistent 
{

Property Name As %String;
Property City As %String;

<Storage name="Default">
    <Data name="PersonDefaultData">
        <Value name="1">
            <Value>City</Value>
        </Value>
        <Value name="2">
            <Value>Name</Value>
        </Value>
    </Data>
    <DataLocation>^MyApp.PersonD</DataLocation>
    <DefaultData>PersonDefaultData</DefaultData>
    <IdLocation>^MyApp.PersonD</IdLocation>
    <IndexLocation>^MyApp.PersonI</IndexLocation>
    <Type>%Library.CacheStorage</Type>
</Storage>
}

XML ストレージ定義には、定義されたすべてのストレージ・キーワードと、XML 要素として表された対応する値が含まれています。

クラス定義と同様に、この定義はクラス・エディタで直接編集できます。無効な XML 構文を入力した場合、エラーとしてエディタにカラー表示でその構文が表示されます。

ストレージ定義は、単純な変更、または変更を繰り返す場合に便利です。

例えば、物理的なストレージ・レイアウトを変更することなく、プロパティ名を City から HomeCity に変更する場合 (つまり、新しい名前のプロパティで、古い名前のプロパティに保存されている値にアクセスする場合)を考慮してみましょう。これは、クラス・エディタを使用して以下のように行うことができます。

  1. クラス定義をスタジオのクラス・エディタ・ウィンドウにロードし、そのストレージを表示します。

  2. エディタの [既定値に戻す] コマンドを使用して、プロパティ City のすべてのオカレンスを HomeCity と置換します。(プロパティ定義、メソッド・コード、または説明、あるいはストレージ定義の本文の) プロパティ名である City のオカレンスだけを変更するように注意してください。他のクラス定義キーワードの値を置換しないでください。

  3. クラス定義を保存し、再コンパイルします。

FeedbackOpens in a new tab