DBMSCaché。 木工-多次元データ構造へのSQLアクセス

「Cachéを使用すると、プログラマはオブジェクト、SQL、または多次元データ構造への直接アクセスを通じてデータを保存およびアクセスする方法を自由に選択できます。 アクセス方法に関係なく、Cachéデータベースのすべてのデータは多次元配列に格納されます。
Cachéテクノロジガイド

「グローバル(グローバル保存変数)は、大量のデータを保存するためにMUMPSで使用されるBツリー構造の抽象化です。」
実証済みのテクノロジーを使用したユニバーサルNoSQLエンジン

この記事は、さまざまなグローバル構造でSQLプロジェクションを作成するいくつかの例です。

新しいストアドクラスの場合、Cachéは自動的に標準のストレージメソッドCacheStorageを使用します 。 場合によっては、独自のストレージメソッド(CacheSQLStorageまたはCustomStorage)を作成する必要がありますか?


理論のビット



CacheSQLStorage(またはCustomStorage)ストレージスキームの場合、SQLプロジェクション(SQLストレージマップ)が構成されます。 プロジェクションには、使用されるグローバル、それらのキー(添え字)、キーによる受け渡しの規則、およびデータの場所に関するコンパイラーに必要な情報が含まれています。 この情報に基づいて、コンパイラは必要なデータアクセス方法を生成します。

もっと練習する


記事A Universal NoSQL Engineから簡単な例を見てみましょう。 電話帳は、データを保存するための^電話グローバルと、電話番号の所有者によるインデックスを保存するためのnameIndexを使用します。

SQLプロジェクションを作成する際の重要なポイントは、データグローバルのキーとオブジェクト識別子の対応を確立することです。 私たちの場合、これは電話番号です-最初のキーは^電話です。


ストレージを設定した後、 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の講義をご覧ください。

Source: https://habr.com/ru/post/J179523/


All Articles