Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

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

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

Note:

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

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

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

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

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

Note:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ストレージ名

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

"サーバ側プログラミングの入門ガイド" の付録 “識別子のルールとガイドライン” にあるセクション “クラス・メンバ” を参照してください。

ストレージ・タイプ

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

  • ストレージ — このストレージ定義は、%Storage.Persistent クラスをベースにします。これは、新規の永続クラスに使用される既定のストレージ・タイプです。

  • SQL ストレージ — このストレージ定義は、%Storage.SQL クラスをベースにします。このストレージ・タイプは、ストレージ・オペレーションを実行する SQL 文を使用します。このストレージ・タイプは、オブジェクトを既存のデータ構造にマッピングするか、または InterSystems SQL ゲートウェイを経由してリモートの RDBMS と通信するのに使用します。

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

説明

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

説明には、HTML フォーマット・タグを記述することもできます。"クラスの定義と使用" の “クラス・ドキュメントの作成” を参照してください。

%Storage.Persistent 定義のグローバル特性ページ

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

DataLocation

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

IndexLocation

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

IdLocation

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

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

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

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

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

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

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

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

Data Nodes

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

SQL Storage Map

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

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

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

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

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

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

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

/// A simple persistent class

Class User.Person Extends %Persistent
{

Property Name As %String;

Property City As %String;

Storage Default
{
<Data name="PersonDefaultData">
    <Value name="1">
        <Value>%%CLASSNAME</Value>
    </Value>
    <Value name="2">
        <Value>Name</Value>
    </Value>
    <Value name="3">
        <Value>City</Value>
    </Value>
</Data>
<DataLocation>^User.PersonD</DataLocation>
<DefaultData>PersonDefaultData</DefaultData>
<IdLocation>^User.PersonD</IdLocation>
<IndexLocation>^User.PersonI</IndexLocation>
<StreamLocation>^User.PersonS</StreamLocation>
<Type>%Storage.Persistent</Type>
}

}

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

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

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

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

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

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

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

FeedbackOpens in a new tab