- RDBとNoSQL
@@ -124,36 +124,8 @@
-
インピーダンスミスマッチ
-
-
プログラム中ではListやネスト構造によりデータを扱うことができる。
-しかしデータベースにはそのような概念はない。
-
-
そこにプログラムとデータベースの間にギャップが生じる。
-これをインピーダンスミスマッチという。
-
-
RDBではネスト構造を許さない第一正規形とは相容れない。
-
-
-
-
-
-
NoSQLのトランザクション
-
-
CassandraやほとんどのNoSQLではACIDなトランザクションがない。
-トランザクション中の処理は外部からは閲覧出来ない。
-しかし、複数行を1回で書き換える機能を持っていないため、
-データを書き込んでいる途中の状態が見えてしまう場合がある。
-
-
-
-
-
Jungle Databaseの提案
-
前章までRDBではプログラムとのミスマッチや分散構造に向いていない問題、NoSQLではトランザクションでの問題点について触れた。
-これらの問題を解決するため、当研究室で開発しているデータベースJungleを提案する。
-
Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。
非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。
@@ -184,7 +156,7 @@
-
ゲームのデータ構造
+
ゲームのデータ構造
Jungleはもともと認証管理システムやWeb向けに作られたものである。
これらはすべて木構造をベースとしている。
@@ -201,17 +173,6 @@
-
Jungle-Sharpの実装
-
-
JungleはもともとJavaとHaskellで書かれていた。
-今回はJava版をベースにC#で再実装する。
-
-
エラーをチェックするEitherの部分だけはHaskellの要素を取ってくる。
-
-
-
-
-
Atomic Refarenceの実装
Jungleの木の変更(commit)はCAS(Check and Set)を用いてatomicに行われる。
@@ -236,62 +197,6 @@
-
Listの実装
-
-
木やリストをたどる時にJavaではIteratorを用いる。
-Iteratorは次の値があるかを返すboolean hasNext()と、Tという型の次の値を取ってくるT next()を持つObjectである。
-C#では木やリストを辿りながらyeildで次の値を返す。
-Javaでは以下のように実装されている。
-
-
-public Iterator<T> iterator() {
- return new Iterator<T>() {
- Node<T> currentNode = head.getNext();
-
- @Override
- public boolean hasNext() {
- return currentNode.getAttribute()
- != null;
- }
-
- @Override
- public T next() {
- T attribute
- = currentNode.getAttribute();
- currentNode
- = currentNode.getNext();
- return attribute;
- }
- };
-}
-
-
-
-
-
-
-
-
Listの実装
-
-
C#ではそもそも匿名クラスの中でメソッドを定義できない。
-この場合はIEnuratorを使って書き直すことができた。
-
-
-// C\#
-public IEnumerator<T> iterator() {
- Node<T> currentNode = head.getNext();
- while (currentNode.getAttribute() != null) {
- yield return (T)currentNode.getAttribute();
- currentNode = currentNode.getNext ();
- }
-}
-
-
-
-
-
-
-
Eitherのチェック
Haskellでは例外処理はモナド内部で行う設計になっている。
@@ -353,7 +258,7 @@
-
例題のゲーム
+
例題のゲーム
前章ではJungle-Sharpのどのように実装したかを述べた。
@@ -362,7 +267,7 @@
今回作ったゲームはMinecraftの簡易版である。
-
+
プレイヤーは自由にマップを移動し、ステージの破壊や、生成を行うことができる。
@@ -373,17 +278,17 @@
-
ゲームデータの種類
+
ゲームデータの種類
ゲームのデータにはいくつかの種類が考えられる。
-
オブジェクトが単体で持つデータ
+
オブジェクトが単体で持つデータ
シーン内に存在するオブジェクトが持つパラメータ。
例えば、プレイヤーのHPや経験値、位置座標などを示す。
-
オブジェクト1つで複数持つデータ
+
オブジェクト1つで複数持つデータ
プレイヤーが持つアイテムデータなどを示す。
@@ -397,7 +302,7 @@
-
データのデータ設計
+
データのデータ設計
Jungleには複数の木を持つことができる。
@@ -414,7 +319,7 @@
以下にその例を示す。
-
+
@@ -428,7 +333,7 @@
以下にその例を示す。
-
+
@@ -465,7 +370,7 @@
-
データを取り出す
+
データを取り出す
データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。
以下に取り出す例を記述する。
@@ -483,7 +388,26 @@
-
まとめ
+
Jungle-Sharpの評価
+
+
+
+
+
+
以下の図より、Unityで実行した結果ではO(n)のグラフを示している。
+Unityではレンダリングの機能も兼ねている。
+そのためプログラムを実行している間もレンダリングを行っているため、
+純粋なPutAttributeの計算時間ではないと考えられる。
+
+
そこで、純粋な速度を測定するためXamarinで動かし測定した。
+C#で再実装したJungleはJava版とほぼ同じ計算量を示している。
+これにより、本来のJavaと同じ、もしくはそれ以上のパフォーマンスを引き出すことができる。
+
+
+
+
+
+
まとめ
本研究の流れは
@@ -508,8 +432,7 @@
ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。
そのため、過去の木をどこまで必要かを検討しなければならない。
-
現在C#版のJungleにはデータを永続化させる仕組みは備わっていない。
-実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。
+
実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。
diff -r fb3fdd2fe389 -r 9a433c2a0ef6 presen/slide.md
--- a/presen/slide.md Wed Feb 15 18:09:29 2017 +0900
+++ b/presen/slide.md Wed Feb 15 19:37:42 2017 +0900
@@ -4,7 +4,7 @@
lang: Japanese
code-engine: coderay
-# この発表のセクション
+# この発表では
- RDBとNoSQL
- Jungle Databseの提案
@@ -27,29 +27,8 @@
一貫性を一部犠牲にしているNoSQLでは分散させることが可能である。
CassandraやMongoDBなどが例に挙げられる。
-# インピーダンスミスマッチ
-
-プログラム中ではListやネスト構造によりデータを扱うことができる。
-しかしデータベースにはそのような概念はない。
-
-そこにプログラムとデータベースの間にギャップが生じる。
-これをインピーダンスミスマッチという。
-
-RDBではネスト構造を許さない第一正規形とは相容れない。
-
-
-# NoSQLのトランザクション
-
-CassandraやほとんどのNoSQLではACIDなトランザクションがない。
-トランザクション中の処理は外部からは閲覧出来ない。
-しかし、複数行を1回で書き換える機能を持っていないため、
-データを書き込んでいる途中の状態が見えてしまう場合がある。
-
# Jungle Databaseの提案
-前章までRDBではプログラムとのミスマッチや分散構造に向いていない問題、NoSQLではトランザクションでの問題点について触れた。
-これらの問題を解決するため、当研究室で開発しているデータベースJungleを提案する。
-
Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。
非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。
@@ -85,13 +64,6 @@
これをシーングラフと言う。
シーングラフをそのままJungleに格納するという手法が考えられる。
-# Jungle-Sharpの実装
-
-JungleはもともとJavaとHaskellで書かれていた。
-今回はJava版をベースにC\#で再実装する。
-
-エラーをチェックするEitherの部分だけはHaskellの要素を取ってくる。
-
# Atomic Refarenceの実装
Jungleの木の変更(commit)はCAS(Check and Set)を用いてatomicに行われる。
@@ -113,56 +85,6 @@
```
-# Listの実装
-
-木やリストをたどる時にJavaではIteratorを用いる。
-Iteratorは次の値があるかを返すboolean hasNext()と、Tという型の次の値を取ってくるT next()を持つObjectである。
-C\#では木やリストを辿りながらyeildで次の値を返す。
-Javaでは以下のように実装されている。
-
-``` Java
-
-public Iterator iterator() {
- return new Iterator() {
- Node currentNode = head.getNext();
-
- @Override
- public boolean hasNext() {
- return currentNode.getAttribute()
- != null;
- }
-
- @Override
- public T next() {
- T attribute
- = currentNode.getAttribute();
- currentNode
- = currentNode.getNext();
- return attribute;
- }
- };
-}
-
-```
-
-# Listの実装
-
-C\#ではそもそも匿名クラスの中でメソッドを定義できない。
-この場合はIEnuratorを使って書き直すことができた。
-
-``` C\#
-
-// C\#
-public IEnumerator iterator() {
- Node currentNode = head.getNext();
- while (currentNode.getAttribute() != null) {
- yield return (T)currentNode.getAttribute();
- currentNode = currentNode.getNext ();
- }
-}
-
-```
-
# Eitherのチェック
Haskellでは例外処理はモナド内部で行う設計になっている。
@@ -224,7 +146,7 @@
今回作ったゲームはMinecraftの簡易版である。
-
+
プレイヤーは自由にマップを移動し、ステージの破壊や、生成を行うことができる。
@@ -265,7 +187,7 @@
以下にその例を示す。
-
+
# ItemTree
@@ -275,7 +197,7 @@
以下にその例を示す。
-
+
# Jungleの改良
@@ -320,6 +242,22 @@
分散構造や、ネットワークで必要な時だけ変換する。
+# Jungle-Sharpの評価
+
+
+
+
+
+以下の図より、Unityで実行した結果ではO(n)のグラフを示している。
+Unityではレンダリングの機能も兼ねている。
+そのためプログラムを実行している間もレンダリングを行っているため、
+純粋なPutAttributeの計算時間ではないと考えられる。
+
+そこで、純粋な速度を測定するためXamarinで動かし測定した。
+C\#で再実装したJungleはJava版とほぼ同じ計算量を示している。
+これにより、本来のJavaと同じ、もしくはそれ以上のパフォーマンスを引き出すことができる。
+
+
# まとめ
本研究の流れは
@@ -343,5 +281,4 @@
ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。
そのため、過去の木をどこまで必要かを検討しなければならない。
-現在C\#版のJungleにはデータを永続化させる仕組みは備わっていない。
実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。
diff -r fb3fdd2fe389 -r 9a433c2a0ef6 presen/slide.pdf.html
--- a/presen/slide.pdf.html Wed Feb 15 18:09:29 2017 +0900
+++ b/presen/slide.pdf.html Wed Feb 15 19:37:42 2017 +0900
@@ -70,12 +70,12 @@
-この発表のセクション
+この発表では
- RDBとNoSQL
@@ -108,36 +108,8 @@
-
インピーダンスミスマッチ
-
-
プログラム中ではListやネスト構造によりデータを扱うことができる。
-しかしデータベースにはそのような概念はない。
-
-
そこにプログラムとデータベースの間にギャップが生じる。
-これをインピーダンスミスマッチという。
-
-
RDBではネスト構造を許さない第一正規形とは相容れない。
-
-
-
-
-
-
NoSQLのトランザクション
-
-
CassandraやほとんどのNoSQLではACIDなトランザクションがない。
-トランザクション中の処理は外部からは閲覧出来ない。
-しかし、複数行を1回で書き換える機能を持っていないため、
-データを書き込んでいる途中の状態が見えてしまう場合がある。
-
-
-
-
-
Jungle Databaseの提案
-
前章までRDBではプログラムとのミスマッチや分散構造に向いていない問題、NoSQLではトランザクションでの問題点について触れた。
-これらの問題を解決するため、当研究室で開発しているデータベースJungleを提案する。
-
Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。
非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。
@@ -168,7 +140,7 @@
-
ゲームのデータ構造
+
ゲームのデータ構造
Jungleはもともと認証管理システムやWeb向けに作られたものである。
これらはすべて木構造をベースとしている。
@@ -185,17 +157,6 @@
-
Jungle-Sharpの実装
-
-
JungleはもともとJavaとHaskellで書かれていた。
-今回はJava版をベースにC#で再実装する。
-
-
エラーをチェックするEitherの部分だけはHaskellの要素を取ってくる。
-
-
-
-
-
Atomic Refarenceの実装
Jungleの木の変更(commit)はCAS(Check and Set)を用いてatomicに行われる。
@@ -220,62 +181,6 @@
-
Listの実装
-
-
木やリストをたどる時にJavaではIteratorを用いる。
-Iteratorは次の値があるかを返すboolean hasNext()と、Tという型の次の値を取ってくるT next()を持つObjectである。
-C#では木やリストを辿りながらyeildで次の値を返す。
-Javaでは以下のように実装されている。
-
-
-public Iterator<T> iterator() {
- return new Iterator<T>() {
- Node<T> currentNode = head.getNext();
-
- @Override
- public boolean hasNext() {
- return currentNode.getAttribute()
- != null;
- }
-
- @Override
- public T next() {
- T attribute
- = currentNode.getAttribute();
- currentNode
- = currentNode.getNext();
- return attribute;
- }
- };
-}
-
-
-
-
-
-
-
-
Listの実装
-
-
C#ではそもそも匿名クラスの中でメソッドを定義できない。
-この場合はIEnuratorを使って書き直すことができた。
-
-
-// C\#
-public IEnumerator<T> iterator() {
- Node<T> currentNode = head.getNext();
- while (currentNode.getAttribute() != null) {
- yield return (T)currentNode.getAttribute();
- currentNode = currentNode.getNext ();
- }
-}
-
-
-
-
-
-
-
Eitherのチェック
Haskellでは例外処理はモナド内部で行う設計になっている。
@@ -337,7 +242,7 @@
-
例題のゲーム
+
例題のゲーム
前章ではJungle-Sharpのどのように実装したかを述べた。
@@ -346,7 +251,7 @@
今回作ったゲームはMinecraftの簡易版である。
-
+
プレイヤーは自由にマップを移動し、ステージの破壊や、生成を行うことができる。
@@ -357,17 +262,17 @@
-
ゲームデータの種類
+
ゲームデータの種類
ゲームのデータにはいくつかの種類が考えられる。
-
オブジェクトが単体で持つデータ
+
オブジェクトが単体で持つデータ
シーン内に存在するオブジェクトが持つパラメータ。
例えば、プレイヤーのHPや経験値、位置座標などを示す。
-
オブジェクト1つで複数持つデータ
+
オブジェクト1つで複数持つデータ
プレイヤーが持つアイテムデータなどを示す。
@@ -381,7 +286,7 @@
-
データのデータ設計
+
データのデータ設計
Jungleには複数の木を持つことができる。
@@ -398,7 +303,7 @@
以下にその例を示す。
-
+
@@ -412,7 +317,7 @@
以下にその例を示す。
-
+
@@ -449,7 +354,7 @@
-
データを取り出す
+
データを取り出す
データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。
以下に取り出す例を記述する。
@@ -467,7 +372,26 @@
-
まとめ
+
Jungle-Sharpの評価
+
+
+
+
+
+
以下の図より、Unityで実行した結果ではO(n)のグラフを示している。
+Unityではレンダリングの機能も兼ねている。
+そのためプログラムを実行している間もレンダリングを行っているため、
+純粋なPutAttributeの計算時間ではないと考えられる。
+
+
そこで、純粋な速度を測定するためXamarinで動かし測定した。
+C#で再実装したJungleはJava版とほぼ同じ計算量を示している。
+これにより、本来のJavaと同じ、もしくはそれ以上のパフォーマンスを引き出すことができる。
+
+
+
+
+
+
まとめ
本研究の流れは
@@ -492,8 +416,7 @@
ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。
そのため、過去の木をどこまで必要かを検討しなければならない。
-
現在C#版のJungleにはデータを永続化させる仕組みは備わっていない。
-実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。
+
実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。