annotate paper/main.tex @ 22:45181a72dedc default tip

image add.
author Kazuma Takeda
date Thu, 16 Feb 2017 10:56:58 +0900
parents 10a1f30eb748
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
1 \documentclass[a4j,12pt]{jreport}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
2 \usepackage[dvipdfmx]{graphicx}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
3 \usepackage{mythesis}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
4 \usepackage{multirow}
1
Kazuma Takeda
parents: 0
diff changeset
5 \usepackage{ascmac}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
6 \usepackage{here}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
7 \usepackage{url}
1
Kazuma Takeda
parents: 0
diff changeset
8 \usepackage{fancyhdr}
Kazuma Takeda
parents: 0
diff changeset
9 \usepackage{float}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
10 \usepackage{listings, jlisting}
1
Kazuma Takeda
parents: 0
diff changeset
11 %% \input{dummy} %% font
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
12
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
13 \lstset{
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
14 language=java,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
15 tabsize=2,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
16 frame=single,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
17 basicstyle={\ttfamily\footnotesize},%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
18 identifierstyle={\footnotesize},%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
19 commentstyle={\footnotesize\itshape},%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
20 keywordstyle={\footnotesize\bfseries},%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
21 ndkeywordstyle={\footnotesize},%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
22 stringstyle={\footnotesize\ttfamily},
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
23 breaklines=true,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
24 captionpos=b,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
25 columns=[l]{fullflexible},%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
26 xrightmargin=0zw,%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
27 xleftmargin=1zw,%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
28 aboveskip=1zw,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
29 numberstyle={\scriptsize},%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
30 stepnumber=1,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
31 numbersep=0.5zw,%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
32 lineskip=-0.5ex,
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
33 numbers=left
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
34 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
35 \renewcommand{\lstlistingname}{Code}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
36
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
37 \setlength{\itemsep}{-1zh}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
38
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents: 10
diff changeset
39 \title{ゲームエンジンにおける木構造データベースjungleの提案}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
40 \title{Proposal of tree structured database Jungle in Game Engine.}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
41 \icon{
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
42 \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
43 }
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents: 10
diff changeset
44 \year{平成29年度 卒業論文}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
45 \belongto{琉球大学工学部情報工学科}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
46 \author{135768K 武田 和馬 \\ 指導教員 {河野 真治} }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
47
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
48 %% TreeVNC のNATへの対応
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
49 %% マルチスクリーン TreeVNC
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
50 %% プリアンブルに記述
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
51 %% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
52 %%
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
53 \makeatletter
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
54 \newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
55 \newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
56 \makeatother
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
57 \setlength\abovecaptionskip{0pt}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
58
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
59 \begin{document}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
60
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
61 % タイトル
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
62 \maketitle
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
63 \baselineskip 17pt plus 1pt minus 1pt
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
64
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
65 \pagenumbering{roman}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
66 \setcounter{page}{0}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
67
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
68 \tableofcontents % 目次
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
69 \listoffigures % 図目次
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
70 \listoftables % 表目次
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
71
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
72 %以下のように、章ごとに個別の tex ファイルを作成して、
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
73 % main.tex をコンパイルして確認する。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
74 %章分けは個人で違うので下のフォーマットを参考にして下さい。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
75
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
76 % はじめに
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
77
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
78 % 1章では研究目的を書かない(もったいない)
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
79 \chapter{ゲームエンジンにおけるデータベース}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
80
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
81 この章ではデータベースの種類であるRelational DatabaseとNoSQLについて述べる。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
82 次に分散システムにおいて重要なCAP定理に触れる。
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
83
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
84 \section{Relational Database}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
85
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
86 Relational Database(RDB)は、列と行からなる2次元のテーブルにより実装されるデータベースである。
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
87 データ型として文字列、数値、日付、Bool型がある。
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
88 RDBはスキーマの決まったデータを扱うことを長所としている。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
89
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
90 RDBは主として使われているデータベースであるが、苦手としている事がある。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
91
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
92 それは、スキーマレスなデータの扱いやマシン台数を増やし処理速度を上げることである。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
93
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
94 テーブルを水平分割や垂直分割によりデータを分割できるが構造としては複雑化していく。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
95
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
96 プログラムとデータベースとの間にミスマッチが発生する。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
97 これをインピーダンスミスマッチという。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
98
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
99 プログラムではリストやネスト構造によりデータを持つことができる。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
100 しかし、データのネスト構造を許さない第一正規形を要求するRDBとは相容れない。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
101
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
102 ORMapperではデータベースのレコードをプログラム中のオブジェクトにマッピングし扱うことができる。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
103 オブジェクトに対する操作を行うとORMapperがSQLを発行し、処理を行ってくれる。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
104 しかしレコードをプログラム中のオブジェクトを対応させるORMapperの技術でインピーダンスミスマッチの本質的な部分を解決することはできない。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
105
12
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
106 \pagenumbering{arabic}
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
107
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
108 %序論の目安としては1枚半ぐらい.
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
109 %英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも.
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
110
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
111 \section{ACIDトランザクション}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
112
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
113 ACID(Atomicity,Consistency,Isolation,Durability) は
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
114 データベースのトランザクションの処理が確実に実行されることを保証するものである\cite{amazonacid}。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
115
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
116 ほとんどのRDBではACIDトランザクションを保証している。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
117
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
118 \begin{itemize}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
119 \item Atomicity(原子性)
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
120
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
121 トランザクションを実行する際に、すべて成功するか、すべて失敗するか。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
122
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
123 \item Consistency(一貫性)
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
124
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
125 トランザクション開始時と終了時にデータが一貫していなければならない。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
126
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
127 \item Isolation(独立性)
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
128
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
129 他のトランザクションによる干渉を受けない。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
130
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
131 \item Durability(永続性)
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
132
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
133 コミットしたトランザクションのデータは保存される。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
134
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
135 \end{itemize}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
136
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
137 \section{NoSQL}
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
138
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
139 NoSQLはNot Only SQLの略である。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
140
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
141 通常NoSQLデータベースは非リレーショナル型であり、スキームの定義がない\cite{nosql}。
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
142 そのため、扱うデータの型が決まっていなくても気軽に扱える。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
143
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
144 \section{CAP定理}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
145
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
146 分散システムにおいて、次の3つを同時に保証することは出来ない。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
147
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
148 \begin{itemize}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
149 \item Consistency(一貫性)
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
150
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
151 すべてのノードはクエリが同じならば同じデータを返す。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
152
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
153 \item Availability(可用性)
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
154
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
155 あるノードに障害が発生しても、機能しているノードにより常にデータの読み書きが行える。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
156
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
157 \item Partition-tolerance(分断耐性)
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
158
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
159 ネットワーク障害によりノードの接続が切れてもデータベースは機能し続けることができる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
160
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
161 \end{itemize}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
162
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
163 これはCAP定理\cite{cap}と呼ばれる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
164 データベースを利用する場合はCAP定理を意識しながら選択する。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
165
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
166 一貫性と可用性を重視したデータベースがRDBである。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
167 分断耐性を必要とする場合はNoSQLデータベースとなる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
168
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
169 NoSQLデータベースでは一貫性を取るか、可用性を取るかによって選択するデータベースが変わる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
170 以下にその2つの例を示す。
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
171
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
172 \section{MongoDB}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
173
12
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
174 MongoDB\cite{mongodb}は2009年に公開されたNoSQLのデータベースである。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
175 ドキュメント指向型とされ、事前にテーブルの構造を決めておく必要がない。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
176 これをスキーマレスという。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
177
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
178 MongoDBはマスター/スレーブ方式のReplicationを採用している。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
179 保存したデータ(マスター)を複数のサーバー(スレーブ)に複製を取る。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
180
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
181 スレーブをReadさせることによって負荷分散も可能になる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
182
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
183 また、一台のサーバーにすべてのデータを持たず、複数のサーバーに分割して保持する。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
184 これをShardingという。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
185
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
186 MongoDBはReplocationとShardingにより、分断耐性と一貫性を持つ。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
187
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
188 \section{Cassandra}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
189
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
190 Cassandra\cite{cassandra}は2008年にFacebookによって公開されたKey-Value型のデータベースである。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
191 AmazonのDynamo\cite{amazonacid}とGoogleのBigTable\cite{bigtable}を合わせた特徴を持っている。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
192 Key-Valueであるため、スキーマレスなNoSQLとなる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
193
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
194 Bigtableから採用した、カラムファミリーと呼ばれる構造を基本としている。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
195
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
196 カラムファミリーの行の部分はHashMapや連想配列のようにKey-Valueで複数格納している。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
197
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
198 1つのKey-Valueの組をカラムと呼ぶ。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
199 RDBとは異なり、カラム名を事前に定義する必要がない。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
200
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
201 Cassandraではサーバーノードの配置にConsistent hasingアルゴリズムを用いる。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
202 また、これによりサーバー同士が理論上リング構造になっている。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
203
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
204 Consistency Hashingによるリングの形成を図\ref{cassandra_ring}に示す.
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
205
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
206 \begin{figure}[h]
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
207 \begin{center}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
208 \includegraphics[width=10cm]{images/cassandra_ring.pdf}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
209 \caption{Consisteyncy hashingによるring型トポロジーの形成}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
210 \label{cassandra_ring}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
211 \end{center}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
212 \end{figure}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
213
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
214 Cassandraはデータを最大どれだけ配置するかを示すReplication factorと, データの読み書きをいくつのノードから行うのかを決めるConsistency Levelの設定が行える。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
215 Consistency Levelには主に ONE, QUORAM, ALL がある。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
216
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
217 Replication factorの数値をNとした場合, ONE は1つのノード, QUORUMは N/2 + 1 のノード, ALLはNのノードへと読み書きを行う。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
218 Replication factorとConsistentcy Levelの設定により, Cassandraは最新のデータを取得したいときと
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
219 そうでないときで読み込みと書き込みの速度をあげることができる。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
220 一貫性が重要なデータに関してはQUORUMにより書き込み読み込みを行うことで常に最新のデータを取得することができる。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
221 多少データが古くてもよい場合はONEなどを使用することでレスポンスを早くすることができる。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
222 Consistency Level QUORUMの時のデータ書き込みと読み込みについて図\ref{quorum_write}と図\ref{quorum_read}に示す。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
223 Consistencyハッシング, Replication factorとConsistency Levelの設定により Cassandra は高い可用性と分断耐性を持つ。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
224
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
225 \begin{figure}[h]
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
226 \begin{center}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
227 \includegraphics[width=10cm]{images/cassandra_quorum_write.pdf}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
228 \caption{Consisteyncy Level QUORUMによる書き込み}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
229 \label{quorum_write}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
230 \end{center}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
231 \end{figure}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
232
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
233 \begin{figure}[h]
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
234 \begin{center}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
235 \includegraphics[width=10cm]{images/cassandra_quorum_read.pdf}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
236 \caption{Consisteyncy Level QUORUMによる読み込み}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
237 \label{quorum_read}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
238 \end{center}
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
239 \end{figure}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
240
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
241 \section{Jungleの提案}
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
242
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
243 この章の前半ではRDBとNoSQLの利点と問題点を取り上げた。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
244
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
245 非破壊的木構造データベースのJungleを提案している\cite{jungle}。
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
246 Jungleはスケーラビリティのあるデータベースとして開発している。
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
247
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
248 ウェブサイトの構造は大体が木構造であるため、データ構造として木構造を採用している。
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
249 しかし、ウェブサイトだけでなくゲームにおいてもデータ構造が木構造になっている。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
250
12
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
251 そこで、本研究ではJungleの木構造である特性を活かし、ゲームエンジンUnity\cite{unity}で作成したゲームで使用する方法を提案する。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
252
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
253 データベースとしてJungle Databaseを採用する。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
254
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
255 JungleはJavaとHaskellによりそれぞれの言語で開発されている。
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
256 本研究で扱うのはJava版をC\#で再実装したものである。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
257
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
258 \chapter{Jungle Database の概念}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
259
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
260 本章ではまずはJungle Databaseの概念と構造について記述する。
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
261
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
262 \section{木構造データベースJungle}
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
263
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
264 当研究室で開発しているJungleは過去の木を保存しつつ、新しい木を構成する手法を採用している。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
265 これを非破壊的木構造という。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
266 非破壊的木構造により、データベースを参照する側と更新する側のデータを安全に扱うことができる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
267
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
268 JungleDatabaseは木の集合からなり、名前で管理される。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
269 木はノードの集合から出来ている。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
270 ノードにはKeyとValueの組からなるデータを持つことができる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
271 これはデータベースのレコードに相当する。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
272
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
273 通常のデータベースと違う点として子のノードを持つことである。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
274
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
275 Jungleは、データの変更を一度生成した木を上書きせず、ルートから編集を行うノードまでのコピーを行い、新しく木構造を構築し、そのルートをアトミックに入れ替える{図\ref{nonDestractTreeEdit}}。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
276 これを非破壊的木構造と呼ぶ。非破壊木構造は新しい木を構築している時にも、現在の木を安全に読み出せるという大きな特徴がある。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
277 しかし、書き込みの手間は大きくなる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
278
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
279 \begin{figure}[h]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
280 \begin{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
281 \includegraphics[height = 3cm , bb=0 0 511 188]{images/nonDestractTreeEdit.pdf}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
282 \caption{非破壊的木構造の木の編集}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
283 \label{nonDestractTreeEdit}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
284 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
285 \end{figure}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
286
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
287 \section{Jungle Database の構造}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
288
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
289 非破壊木構造を採用しているJungleでは、木の変更の手間はO(1)からO(n)となり得る。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
290 つまりアプリケーションに合わせて木を設計しない限り充分な性能を出すことは出来ない。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
291 逆に木の設計を行えば高速な処理が可能である。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
292
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
293 Jungleはオンメモリで使用することを考えており、一度木のルートを取得すれば、その上で木構造として自由にアクセスしてもよい。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
294
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
295 Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、分散構成と持続性を実現する。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
296
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
297 \chapter{JungleDatabaseのAPI}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
298
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
299 本章ではJungleDatabaseのAPIを記述する。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
300
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
301 \section{Jungleの木}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
302
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
303 Jungleは複数の木の名前を利用し、管理しており、名前により生成、編集を行う。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
304 以下にJungleクラスが提供している木の生成、管理を行うAPI(表\ref{jungleTree})に記述する。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
305
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
306 \begin{table}[htb]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
307 \begin{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
308 \caption{Jungleに実装されているAPI}
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
309 \begin{tabular}{|p{14em}|p{14em}|} \hline
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
310 {\tt JungleTree createNewTree(string treeName) } & Jungleに新しく木を生成する。木の名前が重複した場合、生成に失敗しnullを返す。 \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
311 {\tt JungleTree getTreeByName(string treeName)} & JungleからtreeNameと名前が一致するtreeを取得する。名前が一致するTreeがない場合取得は失敗しnullを返す \\ \hline
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
312 \end{tabular}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
313 \label{jungleTree}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
314 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
315 \end{table}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
316
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
317 \section{TreeNode}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
318
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
319 Jungleが保有する木は、複数のノードの集合で出来ている。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
320 ノードは、自身の子のList、属性名と属性値の組のデータを持つ。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
321 ノードに対するアクセスは表\ref{treeNodeAPI}に記述されているAPIを用いて行う。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
322
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
323 \begin{table}[htb]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
324 \begin{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
325 \caption{TreeNodeに実装されているAPI}
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
326 \begin{tabular}{|p{14em}|p{14em}|} \hline
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
327 {\tt Children getChildren()} & ノードの子供を扱うChildrenオブジェクトを返す。\\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
328 {\tt Attribute getAttribute()} &ノードが保持しているデータを扱うAttribteオブジェクトを返す。 \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
329 \end{tabular}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
330 \label{treeNodeAPI}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
331 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
332 \end{table}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
333
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
334 \section{Either}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
335
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
336 jungleでは例外処理を投げる時にEitherクラスを用いて行う。返って来たEitherのオブジェクトに対して、{\tt isA() }で{\tt Error}かどうかをチェックする。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
337 {\tt Error}でない場合は{\tt b()}で対象のオブジェクトを取り出す事ができる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
338
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
339 以下にルートノードの2番目の子どもを取ってくるのEitherのサンプルコードを記述する。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
340
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
341 \begin{itembox}[l]{SaveData.cs}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
342 \scriptsize{
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
343 \begin{verbatim}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
344 Either<Error,TreeNode> either = children.at(2);
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
345 if (either.isA())
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
346 return either.a();
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
347 TreeNode child = either.b();
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
348 \end{verbatim}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
349 }
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
350 \end{itembox}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
351
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
352 \section{ChildrenとAttribute}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
353
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
354 Childrenクラスへのアクセスは表\ref{Children}に記述されているAPIを、Attributeクラスへアクセスは表\ref{Attribute}に記述されているAPIを用いて行う。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
355
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
356 \begin{table}[htb]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
357 \begin{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
358 \caption{Childrenに実装されているAPI}
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
359 \begin{tabular}{|p{14em}|p{14em}|} \hline
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
360 {\tt int size()} & 子供の数を返す。\\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
361 {\tt <Either Error,TreeNode> at(int num)} &ノードが持つ子供の中から、 変数{\tt num}で指定された位置にある子ノードを返す。 \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
362 \end{tabular}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
363 \label{Children}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
364 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
365 \end{table}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
366
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
367 \begin{table}[htb]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
368 \begin{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
369 \caption{Attributeに実装されているAPI}
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
370 \begin{tabular}{|p{14em}|p{14em}|} \hline
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
371 {\tt T get<T>(string key)} &ノードが持つ値から、属性名 {\tt key}とペアの属性値を{\tt Generic}型で返す。 \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
372 {\tt string getString(string key)} &ノードが持つ値から、属性名 {\tt key} とペアの属性値を{\tt string}型で返す。 \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
373 \end{tabular}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
374 \label{Attribute}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
375 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
376 \end{table}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
377
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
378 \section{NodePath}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
379
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
380 Jungleでは、木のノードの位置を{\tt NodePath}クラスを使って表す。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
381 {\tt NodePath}クラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。また、ルートノードは例外として-1と表記される。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
382 {\tt NodePath}クラスが{\tt < -1,1,2,3>} を表している際の例を図\ref{NodePath}に記す。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
383 \begin{figure}[h]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
384 \begin{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
385 \includegraphics[height = 6cm , bb=0 0 568 455]{images/nodePath.pdf}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
386 \caption{NodePath}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
387 \label{NodePath}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
388 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
389 \end{figure}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
390
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
391 \section{木の編集}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
392
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
393 Jungleの木の編集は{\tt JungleTreeEditor}クラスを用いて行われる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
394 {\tt JungleTreeEditor}クラスには編集を行うために、表\ref{editor}に記述されているAPIを用いて行う。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
395
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
396 \begin{table}[htb]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
397 \begin{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
398 \caption{Editorに実装されているAPI}
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
399 \begin{tabular}{|p{14em}|p{14em}|} \hline
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
400 {\tt Either<Error, JungleTreeEditor> addNewChildAt( NodePath path, int pos)} &
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
401 変数{\tt path}で指定した場所にある、ノードの子供の変数{\tt pos}で指定した位置子ノードを追加する\\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
402 {\tt Either<Error, JungleTreeEditor> deleteChildAt( NodePath path, int pos)} &
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
403 変数{\tt path}で指定した場所にある、ノードの子供の変数{\tt pos}で指定した位置の子ノードを削除する。 \\ \hline
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
404 {\tt Either<Error, JungleTreeEditor> putAttribute( NodePath path, string key, object value)} &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
405 変数{\tt path}で指定した場所にあるノードに、属性名 変数{\tt key} 属性値 変数{\tt value}で値を挿入する。 \\ \hline
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
406 {\tt Either< Error, JungleTreeEditor> deleteAttribute( NodePath path, string key)}&
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
407 変数{\tt path}で指定した場所にあるノードが持つ、属性名 変数{\tt key}で保存されているデータを削除する。\\ \hline
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
408 {\tt Either<Error, JungleTreeEditor> commit()} &
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
409 木へ行った変更をコミットする。自分が編集を行っていた間に、他のJungleTreeEditorクラスによって木が更新されていた場合、コミットは失敗する。 \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
410 \end{tabular}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
411 \label{editor}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
412 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
413 \end{table}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
414
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
415 編集を行った後は、関数{\tt editor.commit()}で今までの編集をコミットすることができる。他の{\tt JungleTreeEditor}クラスによって木が更新されていた場合はコミットは失敗し、{\tt commit()}は{\tt Error}を返す。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
416 その場合は、木の編集を最初からやり直す必要がある。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
417
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
418
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
419
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
420 \label{chap:introduction}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
421
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
422 \chapter{Unityでのデータベースの取扱い}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
423 \label{chap:concept}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
424
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
425 この章ではゲームにおけるデータについて述べ、その後Jungleとの関係性や実装を記述する。
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
426
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
427 \section{ゲームのデータ}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
428
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
429 ゲームを開発する際にデータの種類について知っておく必要がある。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
430 以下にゲームにおけるデータを記述する。
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
431
4
82cf63664f43 Add comment.
Kazuma Takeda
parents: 3
diff changeset
432 %% Attonさんの論文に書いてたitemizeを使うといいかも箇条書きっぽいかきかた。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
433 \begin{itemize}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
434 \item オブジェクトが単体で持つデータ
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
435
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
436 シーン内に存在するオブジェクトが持つパラメータ
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
437 例えばプレイヤーのHPや経験値、位置座標などを示す。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
438
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
439 \item オブジェクト1つで複数持つデータ
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
440
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
441 プレイヤーが持つアイテムデータなどを示す。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
442
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
443 \item マスタデータ(ReadOnly)\cite{gamedata}\cite{gamedata2}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
444
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
445 アイテムの名前や敵の出現確率などを示す。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
446 ゲーム開発者のみが更新できる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
447
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
448 \end{itemize}
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
449
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
450 \section{ゲームデータとデータベース}
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
451
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
452 ゲームのデータベースとして使われているのがRDBである。
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
453
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
454 1章で述べたようにRDBとプログラム間ではインピーダンスミスマッチという問題がある。
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
455
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
456 ここではゲームでのインピーダンスミスマッチの例を紹介する。
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
457
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
458 ゲーム中のユーザが持つアイテムという単純なものでも、RDBではユーザとアイテムの組をキーとする巨大な表として管理することになる。
6
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
459 % ネストを許さないのは第一正規形だけ
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
460 プログラム中では、ユーザが持つアイテムリストという簡単な構造を持つが、第一正規形を要求するRDBではネスト構造を許さない。
ea34058cb438 Update first Chapter.
Kazuma Takeda
parents: 5
diff changeset
461
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
462 \section{UnityとJungleの関係}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
463
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
464 Unityは3Dゲームエンジンで、ゲームを構成する要素(Object)をC\#で制御する。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
465 Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
466 これをシーングラフと言う。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
467 シーングラフをそのままJungleに格納するという手法が考えられる。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
468
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
469 \section{Unityにおけるデータベース}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
470
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
471 Unityでのデータベースとして考えられるものとしてはSQLite3、PlayerPrefsが挙げられる。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
472
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
473 PlayerPrefsとは、Unityに特化したバイナリ形式でKeyとValueのみで保存されるものである。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
474 セーブ機能に特化していてメモリ上にDBを展開するものではない。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
475
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
476 SQLite3ではC\#で利用できるORMapperが提供されている。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
477 プログラム中からデータのインサートやデリートを行う。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
478
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
479 %% 思いついたこと入れた UnityでのJsonのお話
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
480 Unity5.3以降のバージョンでは標準でJsonが扱えるようになった。
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
481 これにより、インスタンスをJson化することができる。
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
482
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
483 \chapter{Jungle-Sharpの実装}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
484
12
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
485 JavaとC\#はよく似た言語であり、移行する方法を確立した。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
486 Jungleの中心部分である木構造とIndexを構成する赤黒木のコードはほぼ変更なく移行できた。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
487 C\#ではインナークラスが使えないので明示的なクラスに変換する必要があった。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
488
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
489 \section{AtomicRefarenceの実装}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
490
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
491 Jungleの木の変更(commit)はCAS(Check and Set)を用いてatomicに行われる。競合している書き込み中に自分の書き込みが成功した場合に関数\verb+commit()+が成功する。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
492 失敗した場合ははじめからもう一度行う。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
493
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
494 JavaではAtomicRefarenceが標準であるがC\#にはなかったためAtomicRefarenceのクラスを新たにつくった。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
495
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
496 \begin{itembox}[l]{AtomicRefarence.cs}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
497 \scriptsize{
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
498 \begin{verbatim}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
499 // C#
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
500 public bool CompareAndSet(T newValue, T prevValue) {
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
501 T oldValue = value;
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
502 return (oldValue
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
503 != Interlocked.CompareExchange
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
504 (ref value, newValue, prevValue));
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
505 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
506
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
507 // Java
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
508 AtomicRefarence<T> atomic = new AtomicRefarence<T>();
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
509 atomic.compareAndSet(prevValue, newValue);
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
510
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
511 \end{verbatim}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
512 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
513 \end{itembox}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
514
1
Kazuma Takeda
parents: 0
diff changeset
515
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
516 \section{Listの実装}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
517
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
518 木やリストをたどる時にJavaではIteratorを用いる。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
519 Iteratorは次の値があるかを返すboolean hasNext()と、Tという型の次の値を取ってくるT next()を持つObjectである。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
520 C\#では木やリストを辿りながらyeildで次の値を返す。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
521 Javaでは以下のように実装されている。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
522
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
523 \begin{itembox}[l]{List.java}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
524 \scriptsize{
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
525 \begin{verbatim}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
526 public Iterator<T> iterator() {
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
527 return new Iterator<T>() {
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
528 Node<T> currentNode = head.getNext();
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
529
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
530 @Override
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
531 public boolean hasNext() {
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
532 return currentNode.getAttribute()
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
533 != null;
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
534 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
535
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
536 @Override
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
537 public T next() {
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
538 T attribute
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
539 = currentNode.getAttribute();
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
540 currentNode
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
541 = currentNode.getNext();
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
542 return attribute;
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
543 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
544 };
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
545 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
546 \end{verbatim}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
547 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
548 \end{itembox}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
549
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
550 C\#ではIEnumeratorがあるのでそれを利用した。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
551 ListのforeachではIteratorを呼び出すために、一つずつ要素を返す必要がある。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
552 yield returnステートメントを利用することで位置が保持され、次に呼ばれた際に続きから値の取り出しが可能になる。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
553 以下にその実装例を示す。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
554
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
555 \begin{itembox}[l]{List.cs}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
556 \scriptsize{
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
557 \begin{verbatim}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
558 public IEnumerator<T> iterator() {
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
559 Node<T> currentNode = head.getNext();
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
560 while (currentNode.getAttribute() != null) {
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
561 yield return (T)currentNode.getAttribute();
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
562 currentNode = currentNode.getNext ();
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
563 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
564 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
565 \end{verbatim}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
566 }
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
567 \end{itembox}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
568
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
569 \section{bindの実装}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
570
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
571 Jungleではデータの編集を行った後、Eitherを用いてエラーのチェックを行う。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
572 エラーがあればエラーが包まれたEitherが返される。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
573 エラーがない場合は指定した型のオブジェクトがEitherに包まれて返される。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
574
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
575 これは関数型プログラミング言語、Haskellから採用したものである。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
576
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
577 編集を行うたび、Eitherのチェックbindで行うことにより、より関数型プログラミングに特化した書き方が可能になる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
578 C\#で実装したbindは以下に記述する。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
579
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
580 \begin{itembox}[l]{DefaultEither.cs}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
581 \scriptsize{
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
582 \begin{verbatim}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
583 public Either<A, B> bind (System.Func<B, Either<A, B>> f) {
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
584 if (this.isA ()) {
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
585 return this;
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
586 }
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
587
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
588 return f (this.b ());
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
589 }
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
590 \end{verbatim}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
591 }
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
592 \end{itembox}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
593
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
594 bindでのEitherをチェックしつつデータを格納する例を以下に記述する。
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
595
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
596 \begin{itembox}[l]{DataSaveTest.cs}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
597 \scriptsize{
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
598 \begin{verbatim}
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
599 Item apple = new Item("Apple");
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
600
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
601 either = either.bind ((JungleTreeEditor arg) => {
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
602 return arg.addNewChildAt (rootPath, 0);
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
603 });
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
604
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
605 either = either.bind ((JungleTreeEditor arg) => {
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
606 return arg.putAttribute (apple);
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
607 });
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
608
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
609 \end{verbatim}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
610 }
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
611 \end{itembox}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
612
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
613 bindの実装により、ユーザ側でEitherのErrorチェックを行う必要がなくなる。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
614
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
615
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
616 \chapter{Unityで実装したアプリケーション}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
617
3
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
618 本章ではUnityで実際に作成したアプリケーションを示し、どのようにデータの設計を行ったかを述べる。
6ff8188a7cfa Add one Sentence after Chaper.
Kazuma Takeda
parents: 2
diff changeset
619
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
620 \section{例題のゲーム}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
621
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
622 本論文ではC\#で再実装を行ったJungleをUnityで作られたゲームの上に構築する。
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
623 例題のゲームとしては図\ref{craft}に記載した、マインクラフト\cite{minecraft}の簡易版を作成する。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
624
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
625 \begin{figure}[h]
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
626 \begin{center}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
627 \includegraphics[width=10cm]{images/craft.png}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
628 \caption{craft}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
629 \label{craft}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
630 \end{center}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
631 \end{figure}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
632
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
633 プレイヤーは自由にマップを移動し、ステージの破壊や、生成を行うことができる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
634 破壊や生成のオペレーションに合わせてJungleのノードにも同期する。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
635 この同期も非破壊で行われる。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
636
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
637 \section{ゲームを構成する要素}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
638
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
639 例題ゲームを構成するゲームの要素を記述する。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
640
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
641 Unityではオブジェクトに対してコンポーネントが紐付けられる。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
642 クラスはMonoBehaviourを継承している場合のみコンポーネントして扱える。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
643 %% ただし、MonoBehaviourを継承している場合インスタンスを生成することができない。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
644
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
645 ステージを構成するブロックのコンポーネントして、ItemBoxクラスを紐付ける。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
646 ItemBoxの持つ変数を表\ref{itemboxes}に示す。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
647
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
648 \begin{table}[htb]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
649 \begin{center}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
650 \caption{ItemBoxクラスが持つパラメータ}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
651 \begin{tabular}{|p{14em}|p{14em}|} \hline
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
652 int {\tt Broken }&
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
653 Itemの耐久力、0になると自身のItemBoxのオブジェクトを破壊\\ \hline
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
654 Color {\tt ColorCode} &
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
655 自身のブロックの色 \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
656 \end{tabular}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
657 \label{itemboxes}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
658 \end{center}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
659 \end{table}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
660
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
661 ステージ上に回復アイテムをランダムに配置する。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
662 回復アイテムにはコンポーネントとして、ItemFoodクラスを紐付ける。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
663 ItemFoodが持つ変数を表\ref{itemfood}に示す。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
664
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
665 \begin{table}[htb]
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
666 \begin{center}
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
667 \caption{ItemFoodクラスが持つパラメータ}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
668 \begin{tabular}{|p{14em}|p{14em}|} \hline
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
669 string {\tt Name} &
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
670 食べ物の名前 \\ \hline
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
671 int {\tt Recovery}&
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
672 アイテムを取得時に回復する数\\ \hline
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
673 \end{tabular}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
674 \label{itemfood}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
675 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
676 \end{table}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
677
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
678 プレーヤーにはコンポーネントとしてPlayerクラスを紐付ける。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
679 Playerクラスの持つ変数を表\ref{player}に示す。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
680
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
681 \begin{table}[htb]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
682 \begin{center}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
683 \caption{Playerクラスが持つパラメータ}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
684 \begin{tabular}{|p{14em}|p{14em}|} \hline
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
685 int {\tt HP }&
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
686 プレイヤーの体力、0になるとゲームオーバー\\ \hline
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
687 List {\tt ItemList} &
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
688 プレイヤーが持つアイテムのリスト \\ \hline
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
689 \end{tabular}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
690 \label{player}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
691 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
692 \end{table}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
693
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
694 \section{データの設計}
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
695
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
696 Unityにおけるゲームの構成はObjectの親子関係、つまり木構造である。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
697 同じくJungle Databaseは木構造である。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
698 % Unityでシーンを構成する際にデータの設計を気にしなくてもいい。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
699
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
700 Jungleでは複数の木を持つことができる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
701 ゲームのシーンを構成するGameTreeとアイテムを管理するItemTreeをJungle内に作る。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
702
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
703 ItemTreeは第4章で述べたマスターデータとして扱う。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
704
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
705 GameTreeではシーン内にあるPlayerやStageを構成するCubeなどを格納している。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
706 図\ref{GameTree}ではJungleに格納する構造を示したものである。
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
707
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
708
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
709 \begin{figure}[h]
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
710 \begin{center}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
711 \includegraphics[width=10cm]{images/Tree.pdf}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
712 \caption{GameTree}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
713 \label{GameTree}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
714 \end{center}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
715 \end{figure}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
716
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
717 Jungleではオブジェクトが単体で持つデータとオブジェクトが複数持つデータを同時に表現できる。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
718
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
719 ノード1つのAttributeに対してデータを格納する。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
720 図\ref{GameTree}のようにPlayerが持つアイテムを表現したい場合はPlayerノードの子としてHaveItemノードを作る。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
721 HaveItemノードの子として持っているアイテムを子ノードとすればよい。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
722
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
723 ItemTreeではItemの情報が格納されている。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
724 図\ref{ItemTree}ではJungleに格納しているItemの構造を示したものである。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
725
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
726 \begin{figure}[h]
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
727 \begin{center}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
728 \includegraphics[width=10cm]{images/ItemTree.pdf}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
729 \caption{ItemTree}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
730 \label{ItemTree}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
731 \end{center}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
732 \end{figure}
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
733
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
734 ItemTreeではRootノードはItemのTypeが書かれた子ノードを持っている。
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
735 子ノードはStageを構成するBox Type、回復アイテムとするFood Typeの2種類である。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
736
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents: 10
diff changeset
737 \section{ゲームエンジンに特化したデータベース}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
738
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
739 C\#の再実装を行った際にJavaのJungleに沿ってデータの型、つまりByteArrayで設計を行っていた。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
740
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
741 データの格納を行うたびにByte Arrayへのキャストを行う必要がある。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
742 しかし、キャストの処理は軽くはない。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
743
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
744 そこで、シーンを構成するObjectをそのまま格納するに仕様を変更した。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
745 C\#ではObjectクラスのエイリアスとしてobject型が使える。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
746
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
747 object型を使うことによってユーザーが定義した任意の変数を代入することができる。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
748 以下にその使用例を記述する。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
749
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
750 \begin{itembox}[l]{SaveData.cs}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
751 \scriptsize{
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
752 \begin{verbatim}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
753 Player player = new Player ();
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
754 either = either.bind ((JungleTreeEditor arg) => {
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
755 return arg.putAttribute ("Player", player);
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
756 });
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
757
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
758 Enemy enemy = new Enemy ();
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
759 either = either.bind ((JungleTreeEditor arg) => {
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
760 return arg.putAttribute ("Enemy", enemy);
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
761 });
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
762 \end{verbatim}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
763 }
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
764 \end{itembox}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
765
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
766 % as演算子はbyte arrayにするよりも早いのでOK?か?
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
767 データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
768 以下に取り出す例を記述する。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
769
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
770 \begin{itembox}[l]{SaveData.cs}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
771 \scriptsize{
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
772 \begin{verbatim}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
773 Player player = attr.get<Player> ("Player");
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
774 Enemy enemy = attr.get ("Enemy") as Enemy;
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
775 \end{verbatim}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
776 }
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
777 \end{itembox}
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
778
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
779 データの型の再設計を行ったことによりシーン内のオブジェクトをそのまま格納が可能になった。
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
780 格納の際にByte Arrayに変換する必要がない。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
781
5
d12960315992 Add Image, delete subsection.
Kazuma Takeda
parents: 4
diff changeset
782 分散構造や、ネットワークで必要な時だけ変換する。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
783
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents: 10
diff changeset
784 \chapter{Jungle-Sharpの評価}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
785
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
786 本章ではC\#とJava版Jungleとの比較、Jungle-SharpとUnity上で使われるSQLite3、PlayerPrefsとの比較を行う。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
787
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
788 \section{Javaとの比較}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
789
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
790 本論文ではJavaで書かれたJungle DatabaseをC\#で再実装した。
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
791 同じオペレーションでJavaとC\#で計測する。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
792 なお、1回目の処理はキャッシュを作り処理が遅くなるため、計測は行わず、2回目以降から行う。
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
793 計測時に使用したデータ挿入のオペレーションを以下に記述する。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
794
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
795 % 単一のベンチマーク
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
796 \begin{itembox}[l]{BenchMarkmark.cs}
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
797 \scriptsize{
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
798 \begin{verbatim}
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
799 for (int i = 0; i < trial; i++) {
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
800 Either<Error, JungleTreeEditor> either = edt.addNewChildAt (path, i);
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
801 either = either.bind ((JungleTreeEditor arg) => {
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
802 return arg.putAttribute ("name", "Kazuma");
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
803 });
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
804 }
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
805 \end{verbatim}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
806 }
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
807 \end{itembox}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
808
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
809 計測に使用したマシンの環境を記述する。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
810
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
811 \begin{table}[htb]
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
812 \begin{center}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
813 \caption{計測環境}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
814 \begin{tabular}{|p{14em}|p{14em}|} \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
815 OS &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
816 Mac OS Sierra 10.12.3 \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
817 Memory &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
818 8 GB 2133 MHz LPDDR3 \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
819 CPU &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
820 2.9 GHz Intel Core i5 \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
821 Java &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
822 1.8.0111 \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
823 .NET Runtimes (MonoDevelop-Unity) &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
824 Mono 4.0.5 \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
825 .NET Runtimes (Xamarin) &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
826 Mono 4.6.2 \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
827 \end{tabular}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
828 \label{itembox}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
829 \end{center}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
830 \end{table}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
831
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
832 %% データの図を入れる
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
833
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
834 計測結果を図\ref{BenchMark}に示す。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
835
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
836 \begin{figure}[h]
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
837 \begin{center}
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
838 \includegraphics[width = 10cm]{images/benchmark.pdf}
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
839 \caption{BenchMark}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
840 \label{BenchMark}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
841 \end{center}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
842 \end{figure}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
843
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
844 Jungleでは木構造を変更する計算量として、O(1)からO(n)が期待される。
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
845
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents: 10
diff changeset
846 図\ref{BenchMark}より、Unityで実行した結果ではO(n)のグラフを示している。
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
847 Unityではレンダリングの機能も兼ねている。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
848 そのためプログラムを実行している間もレンダリングを行っているため、
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
849 純粋なPutAttributeの計算時間ではないと考えられる。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
850
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
851 XamarinはC\#の性能を確認するために実行した。
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents: 10
diff changeset
852 C\#で再実装したJungleはJava版とほぼ同じ計算量を示している。
4d06f18af177 add prepaper.
Kazuma Takeda
parents: 10
diff changeset
853
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
854
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
855 % なんでか?みたいなお話
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
856 % プリミティブ型?データ型?
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
857 % Javaは純粋オブジェクト指向言語ではないから?
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
858 % if文が遅い?
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
859 % Lambda式だから早い? - いや遅い気がする
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
860
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
861 \section{SQLite3とPlayerPrefsとの比較}
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
862
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
863 Unityで使われているデータ保存としてSQLite3とPlayerPrefsがある。
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
864 それぞれに対し、データの格納を100回行い、測定する。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
865
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
866 以下にJungle、SQLite3、PlayerPrefsでのデータ挿入を行うサンプルコードを記述する。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
867
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
868 % 単一のベンチマーク
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
869 \begin{itembox}[l]{BenchMarkmark.cs}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
870 \scriptsize{
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
871 \begin{verbatim}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
872
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
873 // Jungle
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
874 for (int i = 0; i < TrialCount; i++) {
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
875 either.bind ((JungleTreeEditor arg) => {
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
876 return arg.putAttribute (rootPath ,"Player_" + i, HP);
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
877 });
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
878 }
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
879
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
880 either.bind ((JungleTreeEditor arg) => {
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
881 return arg.commit();
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
882 });
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
883
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
884 // SQLite3
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
885 for (int i = 0; i < TrialCount; i++) {
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
886 sql.ExecuteNonQuery ("insert into player values("+ i + "," + HP + " )");
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
887 }
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
888
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
889 // PlayerPrefs
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
890 for (int i = 0; i < TrialCount; i++) {
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
891 PlayerPrefs.SetInt ("Player_" + i, HP);
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
892 }
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
893 PlayerPrefs.Save ();
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
894 \end{verbatim}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
895 }
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
896 \end{itembox}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
897
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
898 Jungleは挿入後、\tt{commit()}を行うまでを挿入とする。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
899
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
900 PlayerPrefsは\tt{Save()}を行うとバイナリに書き出される。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
901 そこまでを挿入とする。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
902
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
903 計測結果を以下に記述する。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
904
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
905 \begin{table}[htb]
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
906 \begin{center}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
907 \caption{実行結果}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
908 \begin{tabular}{|p{14em}|p{14em}|} \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
909 Jungle &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
910 12.217ms \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
911 SQLite3 &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
912 126.265ms \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
913 PlayerPrefs &
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
914 985.131ms \\ \hline
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
915 \end{tabular}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
916 \label{itembox}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
917 \end{center}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
918 \end{table}
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
919
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
920 Jungleはデータを直接プログラム内部、つまりオンメモリに持っている。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
921 そのため通信を行わずにデータのやり取りができる。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
922
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
923 SQLite3ではデータを挿入のSQLを実行するたびデータベースとの通信を行うため遅くなっている。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
924
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
925 PlayerPrefsはデータをまとめてセットすることができる。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
926 しかし、バイナリ形式で保存されるため、書き出す時間がかかってしまう。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
927
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
928 \chapter{結論}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
929 \section{まとめ}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
930
10
207fa0b0c3a2 Create Slide.
Kazuma Takeda
parents: 9
diff changeset
931 本研究ではJungleDatabaseをC\#で再実装を行った。
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
932 JavaとC\#は比較的似ている言語であるため移行は難しくはなかった。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
933
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
934 性能としてもJava版に劣らない、もしくはそれ以上のパフォーマンスを出せる。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
935
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
936 Eitherでのbindの実装で、より関数型プログラミングを意識しながら記述することができる。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
937 これはJava版にはない実装である。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
938
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
939 Jungle DatabaseはもともとWeb向けに作られたデータベースである。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
940
12
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
941 Webでは頻繁にデータが書き換わることは多くない。
10a1f30eb748 Update English abstruct.
Kazuma Takeda
parents: 11
diff changeset
942 しかしゲームでは扱うデータが頻繁に書き換わる。
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
943
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
944 そのため、Jungleの構成は保ちつつ、ゲームに合わせたJungleの拡張を行った。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
945
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
946 データの格納の際にByteBufferであったものをObject型に変更した。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
947 これにより、シーンを構成するObjectを手間なく格納することを可能にした。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
948
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
949 Jungleは非破壊であるため、過去の変更を持っている。
9
49607e7d8871 Add Scene, Item Tree Image.
Kazuma Takeda
parents: 8
diff changeset
950
8
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
951 ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
952 そのため、過去の木をどこまで必要かを検討しなければならない。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
953
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
954 現在C\#版のJungleにはデータを永続化させる仕組みは備わっていない。
7313ae32fa21 Fix Code Frame, and Rewrite Summary.
Kazuma Takeda
parents: 6
diff changeset
955 実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
956
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
957 %\section{Alice での実装}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
958
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
959 % 参考文献
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
960 \def\line{−\hspace*{-.7zw}−}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
961 \nocite{*}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
962 \bibliographystyle{junsrt}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
963 \bibliography{reference}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
964
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
965
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
966 \chapter*{謝辞}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
967 \thispagestyle{empty}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
968
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
969 %基本的な内容は以下の通り.参考にしてみて下さい.
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
970 %厳密な決まりは無いので,個々人の文体でも構わない.
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
971 %GISゼミや英語ゼミに参加した人はその分も入れておく.
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
972 %順番は重要なので気を付けるように.(提出前に周りの人に確認してもらう.)
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
973
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
974 \hspace{1zw}本研究の遂行,また本論文の作成にあたり、御多忙にも関わらず終始懇切なる御指導と御教授を賜わりました河野真治准教授に深く感謝致します。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
975
2
dcaa3015e0d5 Add bind Description.
Kazuma Takeda
parents: 1
diff changeset
976 数々の貴重な御助言と細かな御配慮を戴いた金川 竜己さん、比嘉健太さん、伊波立樹さん、並びに並列信頼研究室の皆様に深く感謝致します。
0
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
977
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
978 最後に、有意義な時間を共に過ごした情報工学科の学友、並びに物心両面で支えてくれた両親に深く感謝致します。
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
979
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
980 \begin{flushright}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
981 2017年 3月 \\ 武田和馬
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
982 \end{flushright}
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
983
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
984 % 付録
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
985
9d1c71c756ae first commit
Kazuma Takeda
parents:
diff changeset
986 \end{document}