グローバルの概要
ここでは、InterSystems IRIS® データ・プラットフォームの基盤となっている多次元ストレージ構造であるグローバルの概念について紹介します。データの格納やデータへのアクセスをどのように行うことにしたかには関係なく、実行していることはグローバルの使用です。
グローバルは、リレーショナル・モデルを使用してアクセスするか、オブジェクト・モデルを使用してアクセスするか、または直接アクセスすることができます。このマルチモデル・アクセスの利点を説明するビデオ、および 3 つの代替方法を自分で試すことのできる実践演習については、"Exploring Multiple Data Models with GlobalsOpens in a new tab" を参照してください。
グローバルとは
InterSystems IRIS の特徴の 1 つが、一度データを保存すると、複数のパラダイムを使用してそのデータにアクセスできるようになる機能です。例えば、InterSystems SQL を使用して、データを行と列で視覚化したり、ObjectScript を使用して、プロパティとメソッドを持つオブジェクトの観点からデータを考えることができます。アプリケーションでは、これらのデータ・モデルを組み合わせ、指定されたタスクに対して、より簡単で効果的な方のモデルを使用することも可能です。しかしながら、データをどのように書き込むか、またはデータにどのようにアクセスするかに関係なく、InterSystems IRIS では、グローバルとして知られる基盤となるデータ構造にデータが格納されます。
グローバルは、永続多次元スパース配列です。
-
永続 — グローバルは、データベースに格納され、そのデータベースにアクセスできる任意のプロセスにより、いつでも取り出すことができます。
-
多次元 — グローバルのノードには、任意の数の添え字を指定できます。こういった添え字には、整数、10 進数、または文字列を使用できます。
-
スパース — ノードの添え字は、連続する必要はありません。つまり、格納された値のない添え字はストレージを使用しません。
グローバルのノードには、以下のようなさまざまな種類のデータを格納できます。
-
文字列
-
数値データ
-
文字ストリームまたはバイナリ・データ
-
リストや配列など、データのコレクション
-
他のストレージの場所への参照
記述したサーバ側コードさえも最終的にはグローバルに格納されます。
アプリケーション開発者がグローバルについて学ぶべき理由
グローバルに関する知識をほとんど、あるいはまったく持たずに InterSystems IRIS プラットフォームでアプリケーションを作成することはできますが、グローバルに対する理解を深めることをお勧めする理由がいくつかあります。
-
操作によっては、グローバルに直接アクセスすることで、より簡単に、あるいは効率的になるものがあります。
-
リレーショナル・データ・モデルまたはオブジェクト・データ・モデルに適合しないデータのカスタム・データ構造を作成できます。
-
システム管理タスクによっては、グローバル・レベルで実行されるものがあり、グローバルを理解することで、こういったタスクがより有意義なものになります。
グローバルの例
InterSystems IRIS が初めての場合、グローバルを、他の言語でのプログラミングで経験したデータ構造と比較したくなるかもしれません。グローバルは、さまざまな方法で使用できる柔軟なデータ構造であるため、この比較は困難です。しかし、保持されるデータの種類にかかわらず、グローバルは、その名前の前に記述されたキャレット (^) で通常の変数と区別できます。これは、変数がデータベースに対して永続化されていることを意味します。
スカラ
最も単純な形式では、グローバルは単一値またはスカラの格納に使用できます。
^a = 4
この例では、グローバル ^a は値 4 を持つ整数を保持しますが、前述のように、他の型のデータを保持するのも同様に簡単です。
配列
グローバルは、以下のように、他の言語で配列を使用するような方法で使用することもできます。
^month(1) = "January"
^month(2) = "February"
^month(3) = "March"
^month(4) = "April"
.
.
.
^month(12) = "December"
ただし、配列内のすべての添え字にデータを含める必要はありません。配列はスパースになる可能性があるため、配列内の使用されていない場所にはストレージは割り当てられません。
^sparse(1,2,3) = 16
^sparse(1,2,5000) = 400
また、多くの言語における配列とは異なり、グローバルの添え字には、負数、実数、または文字列を使用できます。さらに、同じ配列でさまざまな型のデータを保持できます。
^misc(-4, "hello", 3.14) = 0
^misc("Sam", 27) = "Persimmon"
ディクショナリ
その柔軟性のゆえに、多くの場合、グローバルの概念は、キーと値のペアで構成するディクショナリ、または入れ子構造のディクショナリとされています。以下の例では、グローバル ^team は、野球チームについての情報を格納します。
^team("ballpark") = "Fenway Park"
^team("division") = "East"
^team("established") = 1901
^team("league") = "American"
^team("name") = "Boston Red Sox"
^team("retired number",1) = "Bobby Doerr"
^team("retired number",4) = "Joe Cronin"
^team("retired number",6) = "Johnny Pesky"
^team("retired number",8) = "Carl Yastrzemski"
^team("retired number",9) = "Ted Williams"
^team("world series titles") = $lb(1903,1912,1915,1916,1918,2004,2007,2013,2018)
多くの言語では、ディクショナリのデータに決まった順序がありません。つまり、ディクショナリのデータを取得すると、そのデータは不定の順序で返されることが考えられます。しかし、グローバルの場合、データは格納されたときの添え字に従ってソートされています。
ツリー構造
そのため、グローバルはツリー構造で表現する方が正確です。ツリー構造では、各ノードに値やその子を置くことができます。この点で、普通はツリーのリーフのみにデータが存在する、その他の言語における入れ子になったディクショナリよりも柔軟です。以下の例では、グローバル ^bird は、学名に従って鳥を格納し、各鳥の名前がツリーのリーフに格納されています。ここでは、ルート・ノードにグローバルの全体的な説明を格納し、鳥類を表すノードにその分類の説明を格納しています。
^bird = "Birds of North America"
^bird("Anatidae") = "Ducks, Geese and Swans"
^bird("Anatidae", "Aix", "sponsa") = "Wood Duck"
^bird("Anatidae", "Anas", "rubripes") = "American Black Duck"
^bird("Anatidae", "Branta", "leucopsis") = "Barnacle Goose"
^bird("Odontophoridae") = "New World Quails"
^bird("Odontophoridae", "Callipepia", "californica") = "California Quail"
^bird("Odontophoridae", "Callipepia", "gambelii") = "Gambel's Quail"
ツリー構造にデータを格納する様子を説明した動画は、"ツリー構造" を参照してください。
グローバルについての短い実践演習とホワイトボードのデモは、Globals QuickstartOpens in a new tab を参照してください。
グローバルと外部言語
サポートされる外部言語のいずれかでアプリケーションを作成している場合、InterSystems IRIS には、ここで説明している 3 つのモデルを使用してデータを操作できるようにする API が用意されています。
-
InterSystems XEP API for Java および InterSystems XEP API for .Net を使用したオブジェクト・アクセス
-
InterSystems Native SDK を使用したグローバルへの直接アクセス
あらゆるアクセス形式がすべての言語でサポートされているわけではありません。