SlideShare a Scribd company logo
EWD 3
トレーニング・コース #25
GlobalストレージのJavaScript用の抽象化
-(f) Documentデータベースのできること
M/Gateway Developments Ltd.
Rob Tweed
訳: 日本ダイナシステム株式会社 嶋 芳成
Document データベースとしての
Global ストレージ
2016/9/19 EWD 3 トレーニング・コース #25 2
1対1 対応
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
},
d: {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
}
2016/9/19 EWD 3 トレーニング・コース #25 3
Document データベースのメソッド
• Documentsデータベースに対するDocumentNode メソッド
/JSON マッピング
• getDocument()
• setDocument()
2016/9/19 EWD 3 トレーニング・コース #25 4
DocumentNode オブジェクトのインスタンス化
var doc = new this.documentStore.DocumentNode('myDoc');
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 5
getDocument()
var doc = new this.documentStore.DocumentNode('myDoc');
var myObj = doc.getDocument();
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 6
生成する
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
},
d: {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
}
getDocument()
var doc = new this.documentStore.DocumentNode('myDoc');
var myObj = doc.getDocument();
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 7
生成する
myObj は、標準のメモリ内の JavaScript オブジェクトで、
DocumentNode の階層構造の、指定された節の下の
部分木のデータのコピーを保持しています
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
},
d: {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
}
setDocument()
var myObj = { //右に示すオブジェクトを生成する }
2016/9/19 EWD 3 トレーニング・コース #25 8
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
},
d: {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
}
setDocument()
var myObj = { //右に示すオブジェクトを生成する }
var doc = new this.documentStore.DocumentNode('myDoc');
// これはまだディスク上には存在しない
2016/9/19 EWD 3 トレーニング・コース #25 9
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
},
d: {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
}
setDocument()
var myObj = { //右に示すオブジェクトを生成する }
var doc = new this.documentStore.DocumentNode('myDoc');
doc.setDocument(myObj);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 10
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
},
d: {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
}
生成する
setDocument()
var myObj = { //右に示すオブジェクトを生成する }
var doc = new this.documentStore.DocumentNode('myDoc');
doc.setDocument(myObj);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 11
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
},
d: {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
}
生成する
myDoc は、ディスク上に生成され、そこには myObj オブ
ジェクトの保持するデータのコピーが格納されています
これで、Global ストレージの節(ノード)と対応されました
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 12
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = dnode.getDocument()
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 13
myObj = {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = dnode.getDocument()
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 14
myObj = {
e1: {
f1a: 'bar1a',
f2a: 'bar2a'
}
e2: {
f1b: 'bar1b',
f2b: 'bar2b',
f3b: 'bar3b'
}
}
myObj は、myDoc("d") の下位節(下位ノード)
の部分木だけから生成されます
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 15
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 16
myObj = {
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
myDoc("d","g")=1000
myDoc("d","h2","w1")="foo"
myDoc("d","h2","w2")="bar"
2016/9/19 EWD 3 トレーニング・コース #25 17
myObj = {
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 18
?
myObj = {
e2: {
f3b: 'new value',
f4b: 'bar4b'
},
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="new value"
myDoc("d","e2","f4b")="bar4b"
myDoc("d","g")=1000
myDoc("d","h2","w1")="foo"
myDoc("d","h2","w2")="bar"
2016/9/19 EWD 3 トレーニング・コース #25 19
myObj = {
e2: {
f3b: 'new value',
f4b: 'bar4b'
},
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.delete();
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e1","f1a")="bar1a"
myDoc("d","e1","f2a")="bar2a"
myDoc("d","e2","f1b")="bar1b"
myDoc("d","e2","f2b")="bar2b"
myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 20
myObj = {
e2: {
f3b: 'new value',
f4b: 'bar4b'
},
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.delete();
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
2016/9/19 EWD 3 トレーニング・コース #25 21
myObj = {
e2: {
f3b: 'new value',
f4b: 'bar4b'
},
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.delete();
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e2","f3b")="new value"
myDoc("d","e2","f4b")="bar4b"
myDoc("d","g")=1000
myDoc("d","h2","w1")="foo"
myDoc("d","h2","w2")="bar"
2016/9/19 EWD 3 トレーニング・コース #25 22
myObj = {
e2: {
f3b: 'new value',
f4b: 'bar4b'
},
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
getDocument() と setDocument()
のさらに進んだ機能
2016/9/19 EWD 3 トレーニング・コース #25 23
配列のマッピング
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
Global ストレージ内での配列は、慣
例に過ぎませんが、添字値として連
続する整数を用います
2016/9/19 EWD 3 トレーニング・コース #25 24
配列のマッピング
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
Global ストレージ内での配列は、慣
例に過ぎませんが、添字値として連
続する整数を用います
旧来のアプリケーションでは、番号付
けは通常 1 からです
2016/9/19 EWD 3 トレーニング・コース #25 25
配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
getDocument() は、これらをオブジェクトにマップする
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
"0": "value0",
"1": "value1",
"2": "value2",
"3": "value3",
"4": "value4",
"5": "value5",
"6": "value6"
}
}
2016/9/19 EWD 3 トレーニング・コース #25 26
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 27
?
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
もし2番目の項目がディスク上に存在しなくなったら?
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 28
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
もし2番目の項目がディスク上に存在しなくなったら?
要素の番号がもはや一致しなくなります
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 29
myDoc("d",3) myObj.d[2]
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
もし2番目の項目がディスク上に存在しなくなったら?
setDocument() を再度用いると問題が生じます
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value3"
myDoc("d",3)="value4"
myDoc("d",4)="value5"
myDoc("d",5)="value6"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 30
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数以外の添字があると順序が狂います
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
myDoc("d","foo")="bar"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 31
?
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 32
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
myDoc("d","foo")="bar"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
"0": "value0",
"1": "value1",
"2": "value2",
"3": "value3",
"4": "value4",
"5": "value5",
"6": "value6"
"foo": "bar"
}
}
2016/9/19 EWD 3 トレーニング・コース #25 33
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
 これは、性能上に大きな問題が生じることになるでしょう
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
… 省略 …
myDoc("d",301839979)="not good"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
…
"not good"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 34
配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
 これは、性能上に大きな問題が生じることになるでしょう
 すべての添字値をチェックする必要が生じるのです
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
… 省略 …
myDoc("d",301839979)="not good"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
…
"not good"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 35
何百万もの添字をチェックするこ
とはできますが…
配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
getDocument() は、性能維持のためにオブジェクトとの間
でマップします
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
"0": "value0",
"1": "value1",
"2": "value2",
"3": "value3",
"4": "value4",
"5": "value5",
"6": "value6"
}
}
2016/9/19 EWD 3 トレーニング・コース #25 36
配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
そして、JavaScript オブジェクトと両方向の変換で曖昧さを
排除したマッピングのためです
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
"0": "value0",
"1": "value1",
"2": "value2",
"3": "value3",
"4": "value4",
"5": "value5",
"6": "value6"
}
}
2016/9/19 EWD 3 トレーニング・コース #25 37
マップされた配列を利用する
var myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
for (var index in myObj.d) {
console.log('element index: ' + myObj.d[index]);
}
forEach 何とかではなく、ループには for を使う必要
があります
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
"0": "value0",
"1": "value1",
"2": "value2",
"3": "value3",
"4": "value4",
"5": "value5",
"6": "value6"
}
}
2016/9/19 EWD 3 トレーニング・コース #25 38
JavaScript 配列についてはどうなる?
JavaScript には正式な配列型があります
例えば右の myObj.d は JavaScript の配列です
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 39
JavaScript 配列についてはどうなる?
JavaScript には正式な配列型があります
例えば右の myObj.d は JavaScript の配列です
これらを setDocument() はどのように処理するのでしょう?
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 40
setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 41
setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value0"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
ゼロ「0」から始まる整数連番の添え字にマッピングされます
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value0",
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 42
従来のGlobalストレージのマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
従来のMUMPSを統合する場合、1から始まる連番に
ついてはどうなるでしょうか?
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 43
?
従来のGlobalストレージのマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
getDocument() によるマッピングは正しく働きます
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
"1": "value1",
"2": "value2",
"3": "value3",
"4": "value4",
"5": "value5",
"6": "value6"
}
}
2016/9/19 EWD 3 トレーニング・コース #25 44
従来のGlobalストレージのマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
オブジェクトからの逆のマッピングも正しく作動します
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
"1": "value1",
"2": "value2",
"3": "value3",
"4": "value4",
"5": "value5",
"6": "value6"
}
}
2016/9/19 EWD 3 トレーニング・コース #25 45
setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",0)="value1"
myDoc("d",1)="value2"
myDoc("d",2)="value3"
myDoc("d",3)="value4"
myDoc("d",4)="value5"
myDoc("d",5)="value6"
しかし、配列からはゼロ「0」に始まる整数連番の添え字に
マッピングされます
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 46
setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
var offset = 1;
myDoc.setDocument(myObj, offset);
myDoc("a")=123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d",1)="value1"
myDoc("d",2)="value2"
myDoc("d",3)="value3"
myDoc("d",4)="value4"
myDoc("d",5)="value5"
myDoc("d",6)="value6"
第2引数としてオフセットを指定しなければ、です
myObj = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: [
"value1",
"value2",
"value3",
"value4",
"value5",
"value6"
]
}
2016/9/19 EWD 3 トレーニング・コース #25 47
ユニークで強力なドキュメント・データ
ベース
• 粒度が細かい
• すなわち、ディスク上のドキュメント内のどのレベルにも適用
可能
• setDocument() を用いて巨大なドキュメントを保存
• getDocument() を用いることで、ある
DocumentNodeの下の下位節を検索します
• ディスク上の Document について、DocumentNode の
value プロパティを利用することで、その Document の任
意のレベルで名前/値のペアを読み書き可能
2016/9/19 EWD 3 トレーニング・コース #25 48

More Related Content

What's hot

Slide
SlideSlide
㉞cocos2d-xの開発環境をインストールしてみよう
㉞cocos2d-xの開発環境をインストールしてみよう㉞cocos2d-xの開発環境をインストールしてみよう
㉞cocos2d-xの開発環境をインストールしてみようNishida Kansuke
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
眞樹 冨澤
 
Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)
Ryuma Tsukano
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
Ryo Suzuki
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
David Buck
 
第12回計算機構成
第12回計算機構成第12回計算機構成
第12回計算機構成
眞樹 冨澤
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutinemelpon
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Etsuji Nakai
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
infinite_loop
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
Fujishiro Takuya
 
3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜
enigma63
 

What's hot (15)

Slide
SlideSlide
Slide
 
㉞cocos2d-xの開発環境をインストールしてみよう
㉞cocos2d-xの開発環境をインストールしてみよう㉞cocos2d-xの開発環境をインストールしてみよう
㉞cocos2d-xの開発環境をインストールしてみよう
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
 
Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
 
第12回計算機構成
第12回計算機構成第12回計算機構成
第12回計算機構成
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜
 

Viewers also liked

EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合するEWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
Kiyoshi Sawada
 
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化するEWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
Kiyoshi Sawada
 
EWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させる
EWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させるEWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させる
EWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させる
Kiyoshi Sawada
 
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップEWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
Kiyoshi Sawada
 
EWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用する
EWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用するEWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用する
EWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用する
Kiyoshi Sawada
 
EWD 3 トレーニング・コース #1 Node.jsとGT.Mの統合方法
EWD 3トレーニング・コース #1 Node.jsとGT.Mの統合方法EWD 3トレーニング・コース #1 Node.jsとGT.Mの統合方法
EWD 3 トレーニング・コース #1 Node.jsとGT.Mの統合方法
Kiyoshi Sawada
 
EWD 3トレーニング・コース #2 EWD 3 の概要
EWD 3トレーニング・コース #2 EWD 3 の概要EWD 3トレーニング・コース #2 EWD 3 の概要
EWD 3トレーニング・コース #2 EWD 3 の概要
Kiyoshi Sawada
 
GT.M: A Tried and Tested Open-Source NoSQL Database
GT.M: A Tried and Tested Open-Source NoSQL DatabaseGT.M: A Tried and Tested Open-Source NoSQL Database
GT.M: A Tried and Tested Open-Source NoSQL Database
Rob Tweed
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
 

Viewers also liked (9)

EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合するEWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
 
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化するEWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
 
EWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させる
EWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させるEWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させる
EWD 3トレーニング・コース #29 ewd-xpress を Linux systemdでサービスとして稼働させる
 
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップEWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
 
EWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用する
EWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用するEWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用する
EWD 3トレーニングコース#7 ewd-xpressメッセージ・パターンを適用する
 
EWD 3 トレーニング・コース #1 Node.jsとGT.Mの統合方法
EWD 3トレーニング・コース #1 Node.jsとGT.Mの統合方法EWD 3トレーニング・コース #1 Node.jsとGT.Mの統合方法
EWD 3 トレーニング・コース #1 Node.jsとGT.Mの統合方法
 
EWD 3トレーニング・コース #2 EWD 3 の概要
EWD 3トレーニング・コース #2 EWD 3 の概要EWD 3トレーニング・コース #2 EWD 3 の概要
EWD 3トレーニング・コース #2 EWD 3 の概要
 
GT.M: A Tried and Tested Open-Source NoSQL Database
GT.M: A Tried and Tested Open-Source NoSQL DatabaseGT.M: A Tried and Tested Open-Source NoSQL Database
GT.M: A Tried and Tested Open-Source NoSQL Database
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 

Similar to EWD 3トレーニングコース#25 GlobalストレージのJavaScript用抽象化-(f) Documentデータベースのできること

EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスするEWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
Kiyoshi Sawada
 
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスするEWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
Kiyoshi Sawada
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScriptAshitaba YOSHIOKA
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch dbEiji Kuroda
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミングnagoya313
 
EmacsとGlossでお絵描きしてみるよ
EmacsとGlossでお絵描きしてみるよEmacsとGlossでお絵描きしてみるよ
EmacsとGlossでお絵描きしてみるよ
Kiwamu Okabe
 
PBL1-v1-006j.pptx
PBL1-v1-006j.pptxPBL1-v1-006j.pptx
PBL1-v1-006j.pptx
NAIST
 
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
mametter
 
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Katsutoshi Makino
 

Similar to EWD 3トレーニングコース#25 GlobalストレージのJavaScript用抽象化-(f) Documentデータベースのできること (10)

EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスするEWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
 
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスするEWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミング
 
EmacsとGlossでお絵描きしてみるよ
EmacsとGlossでお絵描きしてみるよEmacsとGlossでお絵描きしてみるよ
EmacsとGlossでお絵描きしてみるよ
 
PBL1-v1-006j.pptx
PBL1-v1-006j.pptxPBL1-v1-006j.pptx
PBL1-v1-006j.pptx
 
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
 
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
 

More from Kiyoshi Sawada

EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/WebサービスにアクセスするEWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
Kiyoshi Sawada
 
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作るEWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
Kiyoshi Sawada
 
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化するEWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
Kiyoshi Sawada
 
EWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させる
EWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させるEWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させる
EWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させる
Kiyoshi Sawada
 
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合するEWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
Kiyoshi Sawada
 
EWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッション
EWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッションEWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッション
EWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッション
Kiyoshi Sawada
 
EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理
EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理
EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理
Kiyoshi Sawada
 
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩くEWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
Kiyoshi Sawada
 
EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く
EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩くEWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く
EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く
Kiyoshi Sawada
 
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化するEWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
Kiyoshi Sawada
 
EWD 3トレーニングコース#17 Globalストレジ・データベース入門
EWD 3トレーニングコース#17 Globalストレジ・データベース入門EWD 3トレーニングコース#17 Globalストレジ・データベース入門
EWD 3トレーニングコース#17 Globalストレジ・データベース入門
Kiyoshi Sawada
 
EWD 3トレーニングコース#16 ewd-xpressサービス
EWD 3トレーニングコース#16 ewd-xpressサービスEWD 3トレーニングコース#16 ewd-xpressサービス
EWD 3トレーニングコース#16 ewd-xpressサービス
Kiyoshi Sawada
 
EWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用する
EWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用するEWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用する
EWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用する
Kiyoshi Sawada
 
EWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いる
EWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いるEWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いる
EWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いる
Kiyoshi Sawada
 
EWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみる
EWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみるEWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみる
EWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみる
Kiyoshi Sawada
 
EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御
EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御
EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御
Kiyoshi Sawada
 
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
Kiyoshi Sawada
 
EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証
EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証
EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証
Kiyoshi Sawada
 
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
Kiyoshi Sawada
 
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
Kiyoshi Sawada
 

More from Kiyoshi Sawada (20)

EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/WebサービスにアクセスするEWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
 
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作るEWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
 
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化するEWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
 
EWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させる
EWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させるEWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させる
EWD 3トレーニングコース#29 ewd-xpressをWindows上のサービスとして稼働させる
 
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合するEWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
 
EWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッション
EWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッションEWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッション
EWD 3トレーニングコース#27 GlobalストレージのJavaScript用抽象化-(h) EWD 3 セッション
 
EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理
EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理
EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理
 
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩くEWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
 
EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く
EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩くEWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く
EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く
 
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化するEWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
EWD 3トレーニングコース#18 GlobalストレジでNoSQLデータベースをモデル化する
 
EWD 3トレーニングコース#17 Globalストレジ・データベース入門
EWD 3トレーニングコース#17 Globalストレジ・データベース入門EWD 3トレーニングコース#17 Globalストレジ・データベース入門
EWD 3トレーニングコース#17 Globalストレジ・データベース入門
 
EWD 3トレーニングコース#16 ewd-xpressサービス
EWD 3トレーニングコース#16 ewd-xpressサービスEWD 3トレーニングコース#16 ewd-xpressサービス
EWD 3トレーニングコース#16 ewd-xpressサービス
 
EWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用する
EWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用するEWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用する
EWD 3トレーニングコース#15 ewd-xpressでjQuery以外のフレームワークを利用する
 
EWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いる
EWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いるEWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いる
EWD 3トレーニングコース#14 ewd-xpressメッセージ用にAjaxを用いる
 
EWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみる
EWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみるEWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみる
EWD 3トレーニングコース#13 全てをひとつにまとめてewd-xpressで稼働させてみる
 
EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御
EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御
EWD 3トレーニングコース#12 ewd-xpressのセッション・タイムアウトの制御
 
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
 
EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証
EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証
EWD 3トレーニングコース#10 ewd-xpressのSessionとユーザー認証
 
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
 
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
 

Recently uploaded

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 

Recently uploaded (6)

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 

EWD 3トレーニングコース#25 GlobalストレージのJavaScript用抽象化-(f) Documentデータベースのできること