「Cachéを使用すると、プログラマはオブジェクト、SQL、または多次元データ構造への直接アクセスを通じてデータを保存およびアクセスする方法を自由に選択できます。 アクセス方法に関係なく、Cachéデータベースのすべてのデータは多次元配列に格納されます。
Cachéテクノロジガイド「グローバル(グローバル保存変数)は、大量のデータを保存するためにMUMPSで使用されるBツリー構造の抽象化です。」
実証済みのテクノロジーを使用したユニバーサルNoSQLエンジンこの記事は、さまざまなグローバル構造でSQLプロジェクションを作成するいくつかの例です。
新しいストアドクラスの場合、Cachéは自動的に標準のストレージメソッド
CacheStorageを使用し
ます 。 場合によっては、独自のストレージメソッド(CacheSQLStorageまたはCustomStorage)を作成する必要がありますか?
- グローバルで構築されたMUMPS (またはGlobalsDBからの移行 )アプリケーションをアップグレードする場合。 グローバルは、多くの場合、非公式の(動的な)構造として使用されます。ノードの意味は、開発者の合意によって決定されます。 これらの規則を形式化し(クラス記述を作成)、バージョン管理システムを接続して、OOP開発を最大限に活用してみませんか?
- 多数の特別なタスク:多数のプロパティを持つクラス、システムグローバル上の独自の投影クラス。
理論のビット
- CacheStorage-新しいストアドクラスをコンパイルするときにCachéによって使用されます。 SQLおよびオブジェクトを介して作業するためのメソッドは、システムによって生成されます。
- CacheSQLStorage -SQLを介して既存のグローバルを操作するために使用されます。 プログラマーによって作成されました。 データアクセスオブジェクトメソッド(%SaveData、%LoadData、%DeleteData)では、SQLが使用されるため、トリガーが機能します。 SQLプロジェクションを構成する必要があります。
- CustomStorage-独自の複雑なオブジェクトアクセスロジックを実装するために使用されます。 プログラマーによって作成されました。 メソッド%SaveData、%LoadData、%DeleteDataを独自に実装する必要があります。 SQLプロジェクションをカスタマイズできます。
CacheSQLStorage(またはCustomStorage)ストレージスキームの場合、SQLプロジェクション(SQLストレージマップ)が構成されます。 プロジェクションには、使用されるグローバル、それらのキー(添え字)、キーによる受け渡しの規則、およびデータの場所に関するコンパイラーに必要な情報が含まれています。 この情報に基づいて、コンパイラは必要なデータアクセス方法を生成します。
もっと練習する
記事
A Universal NoSQL Engineから簡単な例を見てみましょう。 電話帳は、データを保存するための
^電話グローバルと、電話番号の所有者によるインデックスを保存するための
nameIndexを使用します。
SQLプロジェクションを作成する際の重要なポイントは、データグローバルのキーとオブジェクト識別子の対応を確立することです。 私たちの場合、これは電話番号です-最初のキーは
^電話です。
- 新しい保存されたクラスdata.phones(電話帳)を作成し、それにプロパティname 、 number 、 address 、およびIdKey型のプロパティ番号によるインデックスを追加しましょう。
- sqlというCacheSQLStorageストレージメソッドをクラスに追加します。 ^電話グローバル名前付きデータのデータに投影マップを作成します。 グローバルキーを定義して、マップへの入力を開始します。 最初のキーを追加し、numberプロパティがこのキーに保存されることを示します
- プロパティ値の場所の説明に戻ります。 アドレスプロパティにプロジェクションを追加します。 追加の(2番目の)キー「アドレス」を使用して、値がノードに格納されることを示します。 デフォルトでは、システムはプロパティが区切られた文字列に格納されていると想定します。 私たちの場合、これはそうではありません。 したがって、セパレータと位置番号を削除します。 nameプロパティについても同じことを行います。値は追加のキー「name」に保存されます。 セパレータと位置番号を削除します。 クラスをコンパイルします。 プロジェクションをチェックします-選択リクエストを実行します。
- インデックスグローバルに投影を追加します。 nameプロパティを使用してインデックスを作成します。 ^ nameIndexにマップ(インデックスタイプ付き)を追加します。 キーの説明を追加します-最初のキーはnameプロパティ、2番目のキーはproperty- numberです。 クラスをコンパイルします。 名前フィールドによるフィルタリングを使用して、電話帳からのクエリ要求プランを確認します。
ストレージを設定した後、
data.phonesクラスでクエリを挿入、更新、削除します。 クラスインスタンスへのオブジェクトアクセスを使用してみてください(%新規、%保存、%DeleteId)。 操作を完了した後、グローバルの内容に注意してください。
レガシーアプリケーションに典型的な、より複雑な例を考えてみましょう。 入力では、次の形式のグローバル:
^皿(3)=「ポリッジ」
^皿(3,315)=「粘性米* 200 * 178.2 * 3.1 * 4.4 * 33.7 ** gr * 780」
^皿(3,315,2)= "水* 161 * 161"
^皿(3,315,36)= "米割り* 43.6 * 43.6"
^料理(3,315,50)= "バター* 5 * 5"
^ディッシュ(3,316)= "粘性のあるパール大麦ポリッジ* 200 * 178.7 * 4.1 * 4.6 * 32.1 ** por * 4744"
^皿(3,316,2)= "水* 161 * 161"
^ディッシュ(3,316,34)= "パールオオムギ* 43.6 * 43.6"
^料理(3,316,50)= "バター* 5 * 5"
^ディッシュ(3,317)= "ビスケットオートミールポリッジ* 200 * 206.5 * 5.8 * 6.9 * 32 **毛穴* 6282"
^皿(3,317,2)= "水* 157 * 157"
^皿(3,317,33)= "オートミール* 49.0 * 49.0"
^料理(3,317,50)= "バター* 5 * 5"
^ディッシュ(3,318)=「ビスカスヘラクレスポリッジ* 200 * 192.2 * 5.7 * 6.8 * 28.6 **毛穴* 2436」
^皿(3,318,2)= "水* 161 * 160"
^ディッシュ(3,318,3)= "ヘラクレス* 43.6 * 43.6"
^料理(3,318,50)= "バター* 5 * 5"
ここでは、1つのグローバルに、いくつかのクラスのオブジェクトが格納されます:
dish.kind-皿の種類、
dish.dish-皿、
dish.product-皿の製品。 さらに、グローバルの構造により、これらのクラス間の関係のタイプ(
parent-child)が決まります。
dish.dishおよび
dish.productクラスの投影設定の機能は、グローバルキーを記述するための構文です
プロパティ名の代わりに、クラスの親名が示され、ピリオドの後、そのプロパティの名前が識別子になります。
プロジェクション作成プロセスの高速化:
ヒントと秘密。
キャッシュは、設定された投影をクラスインスタンスに保存します。
したがって、ストレージをプログラムで作成できます。 たとえば、ストレージスキーム
を作成する
ための独自のウィザードを作成します。 Studioでは、構成されたストレージメソッドはxmlとして表示されます(Cache 2013.1では自動的に、以前のバージョンではメニューから
[表示]-[ストレージを表示] )。
格納されたクラスごとに、CachéはExtent要求を作成し、それを実行するプログラムを生成します。 生成されたクラスコードは、投影のカスタマイズまたはデバッグに役立ちます(zExtentExecute、zExtentFetchラベルを参照)。
興味深い投影の例は、Cachéシステムクラスにあります。 たとえば、上記のストレージスキームクラスは、グローバルへの投影です。
プロジェクションの設定の詳細については、インターシステムズイノベーションスクールのVadim Fedorovの
講義をご覧ください。