ewd 3トレーニングコース#17 globalストレジ・データベース入門
TRANSCRIPT
EWD 3トレーニング・コース #17
グローバル・ストレージ・データ
ベース入門M/Gateway Developments Ltd.
Rob Tweed訳 : 日本ダイナシステム株式会社 嶋 芳成
GT.M 版編集 : 澤田 潔
※ 本稿オリジナルは Cache’ 向けとして編纂
05/02/2023 2
EWD 3 グローバル・ストレージ・モジュール• ewd-qoper8-cache• cache.node インターフェース・ファイルをラップす
る
• ewd-qoper8-gtm• NodeM モジュールをラップする
• ewd-qoper8 ワーカーが呼び出すように設計• 2つとも this (ewd-qoper8 ワーカー・オブジェ
クト ) を拡張• this.db
• ewd-xpress をインストールすると自動的にインストールされ構成されます
EWD 3 トレーニング・コース #17
05/02/2023 3
アクセスの 3 つの方式
• Caché と GT.M の関数• グローバル• Caché オブジェクト/クラス
EWD 3 トレーニング・コース #17
05/02/2023 4
関数を呼び出す
• Caché や GT.M アプリケーションを、 EWD 3 で最新式にすることができます• 従来のコードを、 JavaScript 経由で実行できま
す• Caché / GT.M の組み込み言語を用いてグローバ
ル・ストレージを間接的にアクセスできます• JavaScript 開発者が、新しい EWD 3 / ewd-
xpress アプリケーションを構築することを意図あるいは必要としているのではありません
EWD 3 トレーニング・コース #17
05/02/2023 5
関数を呼び出すvar result = this.db.function({ function: 'myFunc^theRoutine', argument: [arg1, arg2]});
EWD 3 トレーニング・コース #17
05/02/2023 6
関数を呼び出すvar result = this.db.function({ function: 'myFunc^theRoutine', argument: [arg1, arg2]});
これは以下のコードと等価
set result=$$myFunc^theRoutine(arg1,arg2)
引数 (arg1 や arg2) は、スカラー変数で、値を参照渡しでは渡せません
result は文字列 ( しかし、文字列化 (stringified) された JSON かもしれません )
EWD 3 トレーニング・コース #17
05/02/2023 7
グローバル・ストレージ・データベースにアクセスする
• 関数についてのさらに詳しい情報は、このコースの後のパートで解説します• ここでは主に、グローバル・ストレージ・
データベースへの直接アクセスについて扱います
EWD 3 トレーニング・コース #17
05/02/2023 8
グローバル・ストレージ : 基礎
EWD 3 トレーニング・コース #17
05/02/2023 9
グローバル・ストレージ・データベース• 主に2つの実装• InterSystems 社製 Caché
• http://www.intersystems.com/our-products/cache/cache-overview/
• FIS 社製 GT.M• https:/www.fisglobal.com/Solutions/Services/Database-Engine• Linux 向け無料のオープン・ソース版
• マルチ・モデルの NoSQL データベース
EWD 3 トレーニング・コース #17
05/02/2023 10
グローバル・ストレージ・データベース• 階層構造
EWD 3 トレーニング・コース #17
05/02/2023 11
グローバル・ストレージ・データベース• 階層構造• スキーマなし
EWD 3 トレーニング・コース #17
05/02/2023 12
グローバル・ストレージ・データベース• 階層構造• スキーマなし• 散在 (sparse: スパース、まばら )
EWD 3 トレーニング・コース #17
05/02/2023 13
グローバル・ストレージ・データベース• 階層構造• スキーマなし• 散在 (sparse: スパース、まばら )• 動的
EWD 3 トレーニング・コース #17
05/02/2023 14
グローバル名
EWD 3 トレーニング・コース #17
05/02/2023 15
グローバル名
Employee
EWD 3 トレーニング・コース #17
05/02/2023 16
グローバル名添字 ( なし , 1 またはそれ以上 )
Employee
EWD 3 トレーニング・コース #17
05/02/2023 17
グローバル名添字 ( なし , 1 またはそれ以上 ) – 数値/文字列
Employee(123456, " 名前 ")
EWD 3 トレーニング・コース #17
05/02/2023 18
グローバル名添字 ( なし , 1 またはそれ以上 )値 Employee(123456, " 名前 ")
EWD 3 トレーニング・コース #17
05/02/2023 19
グローバル名添字 ( なし , 1 またはそれ以上 )値 – 数値/文字列 Employee(123456, " 名前 ") = "Rob Tweed"
EWD 3 トレーニング・コース #17
05/02/2023 20
グローバル名添字 ( なし , 1 またはそれ以上 )値 – 数値/文字列 Employee(123456, " 名前 ") = "Rob Tweed"
EWD 3 トレーニング・コース #17
グローバル節
05/02/2023 21
グローバル名添字 ( なし , 1 またはそれ以上 )値 – 数値/文字列 Employee(123456, " 名前 ") = "Rob Tweed"
EWD 3 トレーニング・コース #17
グローバル節
= 格納・保存する単位
05/02/2023 22
グローバル名添字 ( なし , 1 またはそれ以上 )値 – 数値/文字列 Employee(123456, " 名前 ") = "Rob Tweed"
EWD 3 トレーニング・コース #17
グローバル節
= 格納・保存する単位
各グローバルは、1つ以上の グローバル節 を持つ
05/02/2023 23
グローバル名添字 ( なし , 1 またはそれ以上 )値 – 数値/文字列 Employee(123456, " 名前 ") = "Rob Tweed"
EWD 3 トレーニング・コース #17
グローバル節
= 格納・保存する単位
各グローバルは、1つ以上の グローバル節 を持つことができる1 つの MUMPS データベースは、1つ以上の グローバル を持つことができる
05/02/2023 24
グローバル名添字 ( なし , 1 またはそれ以上 )値動的 – 予め宣言したりスキーマを用意する必要なし
EWD 3 トレーニング・コース #17
05/02/2023 25
グローバル名添字 ( なし , 1 またはそれ以上 )値動的 – 予め宣言したりスキーマを用意する必要なし 生成 : Employee(123456," 名前 ") = "Rob Tweed"
EWD 3 トレーニング・コース #17
05/02/2023 26
グローバル名添字 ( なし , 1 またはそれ以上 )値動的 – 予め宣言したりスキーマを用意する必要なし 生成 : Employee(123456," 名前 ") = "Rob Tweed"
削除 : Employee(123456," 名前 ")
EWD 3 トレーニング・コース #17
05/02/2023 27
階層構造
EWD 3 トレーニング・コース #17
05/02/2023 28
階層構造
myGlobal("a")=123
EWD 3 トレーニング・コース #17
05/02/2023 29
階層構造myGlobal("a")=123
EWD 3 トレーニング・コース #17
myGlobal "a" 123
05/02/2023 30
階層構造myGlobal("a")=123myGlobal("b","c1")="foo"
EWD 3 トレーニング・コース #17
myGlobal "a" 123
05/02/2023 31
階層構造myGlobal("a")=123myGlobal("b","c1")="foo"
EWD 3 トレーニング・コース #17
myGlobal
"a" 123"b" "c1" "foo"
05/02/2023 32
階層構造myGlobal("a")=123myGlobal("b","c1")="foo"myGlobal("b","c2")="foo2"
EWD 3 トレーニング・コース #17
myGlobal
"a" 123"b"
"c1" "foo"
"c2" "foo2"
05/02/2023 33
階層構造myGlobal("a")=123myGlobal("b","c1")="foo"myGlobal("b","c2")="foo2"myGlobal("d","e1","f1")="bar1"myGlobal("d","e1","f2")="bar2"myGlobal("d","e2","f1")="bar1"myGlobal("d","e2","f2")="bar2"myGlobal("d","e2","f3")="bar3"
EWD 3 トレーニング・コース #17
myGlobal"a" 123
"b"
"c1" "foo"
"c2" "foo2"
"d"
"e1"
"e2"
"f1" "bar1"
"f2" "bar2"
"f1" "bar1"
"f2" "bar2"
"f3" "bar3"
05/02/2023 34
階層構造
削除
myGlobal("b","c1")
EWD 3 トレーニング・コース #17
myGlobal"a" 123
"b"
"c1" "foo"
"c2" "foo2"
"d"
"e1"
"e2"
"f1" "bar1"
"f2" "bar2"
"f1" "bar1"
"f2" "bar2"
"f3" "bar3"
05/02/2023 35
階層構造
削除
myGlobal("b")
枝分かれ構造の下のノードもすべてを含む部分が削除されるので注意 !!
EWD 3 トレーニング・コース #17
myGlobal"a" 123
"b"
"c1" "foo"
"c2" "foo2"
"d"
"e1"
"e2"
"f1" "bar1"
"f2" "bar2"
"f1" "bar1"
"f2" "bar2"
"f3" "bar3"