EWD 3トレーニング・コース #18
Global ストレージを用いてNoSQL データベースをモデル化する
M/Gateway Developments Ltd.
Rob Tweed
訳: 日本ダイナシステム株式会社 嶋 芳成
GT.M版編集: 澤田 潔
※ 本稿オリジナルはCache’向けとして編纂
NoSQL データベース
• 主な4種類のモデル• キー/値ストア型
• 表型 (カラム型)
• グラフ型
• ドキュメント (文書)型
2016/9/11 EWD 3 トレーニング・コース #18 2
NoSQL データベース
• ここから示すのは、これらを Global ストレージを用いてモデル化するかということです• 方法はひとつではありません
• もっと良い方法があるかもしれません
• ここでの目的は、Global ストレージ・データベースが実際いかに柔軟で可能性に満ちているかを示すことです
2016/9/11 EWD 3 トレーニング・コース #18 3
キー/値ストア
2016/9/11 EWD 3 トレーニング・コース #18 4
telephone
"221-555-9012" "James, George"
"617-555-1414" "Tweed, Rob"
より複雑なキー/値ストア
2016/9/11 EWD 3 トレーニング・コース #18 5
telephone
"221-555-9012"
"James, George"
"617-555-1414"
"Tweed, Rob"
"住所"
"氏名"
"住所"
"氏名"
"5308,12th Avenue, Brooklyn"
"112 Beacon Street, Boston"
索引
• Global ストレージ・データベースは、索引を自動的には生成しません
• 索引は、Global ストレージを用いて自分で生成します
2016/9/11 EWD 3 トレーニング・コース #18 6
索引
2016/9/11 EWD 3 トレーニング・コース #18 7
telephone
"221-555-9012"
"James, George"
"617-555-1414"
"Tweed, Rob"
"住所"
"氏名"
"住所"
"氏名"
"5308,12th Avenue, Brooklyn"
"112 Beacon Street, Boston"
nameIndex
"James, George"
索引
2016/9/11 EWD 3 トレーニング・コース #18 8
telephone
"221-555-9012"
"James, George"
"617-555-1414"
"Tweed, Rob"
"住所"
"氏名"
"住所"
"氏名"
"5308,12th Avenue, Brooklyn"
"112 Beacon Street, Boston"
nameIndex
"James, George" "211-555-9012" ""
索引
2016/9/11 EWD 3 トレーニング・コース #18 9
telephone
"221-555-9012"
"James, George"
"617-555-1414"
"Tweed, Rob"
"住所"
"氏名"
"住所"
"氏名"
"5308,12th Avenue, Brooklyn"
"112 Beacon Street, Boston"
nameIndex
"James, George" "211-555-9012" ""
"Tweed, Rob" "617-555-1414" ""
索引
2016/9/11 EWD 3 トレーニング・コース #18 10
telephone
"221-555-9012"
"James, George"
"617-555-1414"
"Tweed, Rob"
"住所"
"氏名"
"住所"
"氏名"
"5308,12th Avenue, Brooklyn"
"112 Beacon Street, Boston"
nameIndex
"James, George"
"211-555-9012" ""
"Tweed, Rob" "617-555-1414" ""
"211-863-3932" ""
"224-543-5431" ""
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 11
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 12
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 13
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 14
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 15
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 16
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 17
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 18
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 19
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
RobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 20
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 5
4
5"Rob""value"
"nextNode" 4
ChrisRobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 21
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 6
4
5
"Rob""value"
"nextNode" 4ChrisRobGeorgeJohn
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 22
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 6
4
5
"Rob""value"
"nextNode" 4ChrisRobGeorgeJohn
6"Chris""value"
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 23
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 6
4
5
"Rob""value"
"nextNode" 4ChrisRobGeorgeJohn
6"Chris""value"
"nextNode" 5
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 24
list
"firstNode"
2"lastNode"
"John""value"
5
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 6
4
5
"Rob""value"
"nextNode" 4ChrisRobGeorgeJohn
6"Chris""value"
"nextNode" 5
"previousNode" 6
リンクされたリスト
2016/9/11 EWD 3 トレーニング・コース #18 25
list
"firstNode"
2"lastNode"
"John""value"
6
"previousNode" 4
"node"
"nextNode" 2
2
"previousNode" 5
"value" "George"
"myList"
"nodeCounter" 6
4
5
"Rob""value"
"nextNode" 4ChrisRobGeorgeJohn
6"Chris""value"
"nextNode" 5
"previousNode" 6
テーブル名 行番号 列番号 セルの値
表型/カラム型
2016/9/11 EWD 3 トレーニング・コース #18 26
^table "myTable"
1 "最初のセル"
3 "3番目のセル"
5 "5番目のセル"
1
2"3番目のセル"3
2 "2番目のセル"
3"5番目のセル"5
4 "4番目のセル"
グラフ型
2016/9/11 EWD 3 トレーニング・コース #18 27
名前="Rob"
名前="George"
名前="John"
1
2
7
開示 = public年齢 = 2 年
開示 = public年齢 = 3 日
知って
いる
グラフ型
2016/9/11 EWD 3 トレーニング・コース #18 28
名前="Rob"
名前="George"
名前="John"
1
2
7
開示 = public年齢 = 2 年
開示 = public年齢 = 3 日
知って
いる
個人
1
2
7
"知っている"
"名前"
"名前"
"知っている"
"名前"
2
7
""
"開示"
"日時"
""
"開示"
"日時"
""
"Rob"
"John"
"George"
2
"公的"
"公的"
"2009-12-16T10:06:44Z"
"2008-08-16 T12:23:01Z"
グラフ型
2016/9/11 EWD 3 トレーニング・コース #18 29
名前="Rob"
名前="George"
名前="John"
1
2
7
開示 = public年齢 = 2 年
開示 = public年齢 = 3 日
知って
いる
個人
1
2
7
"知っている"
"名前"
"名前"
"知っている"
"名前"
2
7
""
"開示"
"日時"
""
"開示"
"日時"
""
"Rob"
"John"
"George"
2
"公的"
"公的"
"2009-12-16T10:06:44Z"
"2008-08-16 T12:23:01Z"
グラフ型
2016/9/11 EWD 3 トレーニング・コース #18 30
名前="Rob"
名前="George"
名前="John"
1
2
7
開示 = public年齢 = 2 年
開示 = public年齢 = 3 日
知って
いる
個人
1
2
7
"知っている"
"名前"
"名前"
"知っている"
"名前"
2
7
""
"開示"
"日時"
""
"開示"
"日時"
""
"Rob"
"John"
"George"
2
"公的"
"公的"
"2009-12-16T10:06:44Z"
"2008-08-16 T12:23:01Z"
グラフ型
2016/9/11 EWD 3 トレーニング・コース #18 31
名前="Rob"
名前="George"
名前="John"
1
2
7
開示 = public年齢 = 2 年
開示 = public年齢 = 3 日
知って
いる
個人
1
2
7
"知っている"
"名前"
"名前"
"知っている"
"名前"
2
7
""
"開示"
"日時"
""
"開示"
"日時"
""
"Rob"
"John"
"George"
2
"公的"
"公的"
"2009-12-16T10:06:44Z"
"2008-08-16 T12:23:01Z"
グラフ型
2016/9/11 EWD 3 トレーニング・コース #18 32
名前="Rob"
名前="George"
名前="John"
1
2
7
開示 = public年齢 = 2 年
開示 = public年齢 = 3 日
知って
いる
個人
1
2
7
"知っている"
"名前"
"名前"
"知っている"
"名前"
2
7
""
"開示"
"日時"
""
"開示"
"日時"
""
"Rob"
"John"
"George"
2
"公的"
"公的"
"2009-12-16T10:06:44Z"
"2008-08-16 T12:23:01Z"
グラフ型
2016/9/11 EWD 3 トレーニング・コース #18 33
名前="Rob"
名前="George"
名前="John"
1
2
7
開示 = public年齢 = 2 年
開示 = public年齢 = 3 日
知って
いる
個人
1
2
7
"知っている"
"名前"
"名前"
"知っている"
"名前"
2
7
""
"開示"
"日時"
""
"開示"
"日時"
""
"Rob"
"John"
"George"
2
"公的"
"公的"
"2009-12-16T10:06:44Z"
"2008-08-16 T12:23:01Z"
ドキュメント・データベース
2016/9/11 EWD 3 トレーニング・コース #18 34
myGlobal
"a" 123
"b""c1" "foo"
"c2" "foo2"
"d""e1"
"e2"
"f1" "bar1"
"f2" "bar2"
"f1" "bar1"
"f2" "bar2"
"f3" "bar3"
myGlobal = {a: 123,b: {
c1: 'foo',c2: 'foo2'
},d: {
e1: {f1: 'bar1',f2: 'bar2'
},e2: {
f1: 'bar1",f2: 'bar2',f3: 'bar3'
}}
}
他のモデルも表現可能
• リレーショナル• 実際 Caché は、グローバル・ストレージの上に リレーショナ
ル・ストレージを実現してサポートしています
• オブジェクト• Caché ではこれもサポートしています
• ネイティブな XML データベース• eXtc (今は廃止)
• http://www.mgateway.com/eXtcOverview4_0.pdf
• SimpleDB のエミュレーション• https://github.com/robtweed/node-mdb
2016/9/11 EWD 3 トレーニング・コース #18 35
Top Related