Mercurial > hg > Papers > 2016 > kazuma-midterm
annotate midterm.tex @ 13:03e97e769bb0
fix
author | Kazuma |
---|---|
date | Fri, 21 Oct 2016 22:32:20 +0900 |
parents | 202092f0f309 |
children | 87907fc91f62 |
rev | line source |
---|---|
0 | 1 \documentclass[twocolumn,twoside,9.5pt]{jarticle} |
9 | 2 \usepackage[dvipdfmx]{graphicx} |
6 | 3 \usepackage{picins} |
7 | 4 \usepackage{ascmac} |
0 | 5 \usepackage{fancyhdr} |
7 | 6 \usepackage{here} |
0 | 7 %\pagestyle{fancy} |
8 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿} | |
9 \rhead{} | |
10 \cfoot{} | |
11 | |
12 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}} | |
13 \setlength{\headheight}{0mm} | |
14 \setlength{\headsep}{5mm} | |
15 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}} | |
16 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}} | |
17 \setlength{\textwidth}{181mm} | |
18 \setlength{\textheight}{261mm} | |
19 \setlength{\footskip}{0mm} | |
5 | 20 \pagestyle{empty} |
6 | 21 |
0 | 22 \begin{document} |
6 | 23 \title{UnityにおけるJungleDBの有用性} |
5 | 24 \author{135768K 武田和馬 {}{} 指導教員 : 河野真治} |
0 | 25 \date{} |
26 \maketitle | |
8 | 27 \thispagestyle{fancy} |
0 | 28 |
29 \section{非破壊木構造データベース} | |
30 | |
13 | 31 当研究室ではデータの変更の際に過去の木構造を保存する非破壊木構造データベースであるJungleを開発している\cite{1}。 |
9 | 32 |
13 | 33 本研究ではJungleをUnityを用いたネットワークゲームで使用する方法を提案する。 |
34 データベースとしてJungle DBをC\#で再実装を行い、Unity向けに組み込みを行う。 | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
35 |
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
36 Jugnleの木は、子供を複数持つノードからなる。子供は順序付けられており、任意の位置で作成削除することができる。 |
13 | 37 ノードは属性名と属性値の組からなる表を持つ。 |
0 | 38 |
13 | 39 \section{UnityでのDBの取り扱い} |
40 | |
41 Unityは3Dゲームエンジンで、ゲームを構成する要素(Object)をC\#で制御する。 | |
42 Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。 | |
43 これをシーングラフと言う。 | |
44 シーングラフをそのままJungleに格納するという手法が考えられる。 | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
45 |
13 | 46 JungleはJavaで書かれていたので、Unityで使うにはJungleをC\#で実装する必要がある。 |
47 クライアント側はC\#、サーバー側はJavaで動作するJungleを用いる。 | |
48 Jungleの分散機構を用いてネットワークゲームに必要な通信を行う。 | |
49 通信はMessagePackを基本に実装されている。 | |
50 従って、C\#側でもMessagePackを用いてデータのやり取りを行いたい。 | |
0 | 51 |
13 | 52 Unityではデータの保存の際にSQlite3、PlayerPrefsといったDBがよく使われている。 |
8 | 53 PlayerPrefsとは、Unityに特化したバイナリ形式でKey,Valueのみで保存されるものである。 |
13 | 54 これらのDBにはObjectを直接格納することはできない。 |
55 また、セーブ機能に特化していてメモリ上にDBを展開するものではない。 | |
3 | 56 |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
57 \section{Jungle-Sharpの実装} |
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
58 |
13 | 59 %スムーズにできた部分を書く |
60 %Jungleがプログラミング言語に依存しないものだというのをかくほうがいい | |
61 JavaとC\#はよく似た言語であり、移行はそれほど難しくはない。 | |
62 実際Jungleの中心部分である木構造とIndexを構成する赤黒木\cite{}のコードはほぼ変更なく移行できた。 | |
63 C\#ではインナークラスが使えないので明示的なクラスに変換する必要があった。 | |
0 | 64 |
13 | 65 異なる部分は一つは木を変更した後、木のルートをAtomicに置き部分である。 |
66 もう一つは木をたどる時に使うItertorである。 | |
67 | |
68 %\section{AtomicRefefarenceの実装} | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
69 % atomic reference問題 |
8 | 70 Jungleの木の更新(commit)は、CAS(check and set*図1)を用いて atomic に行われる。競合している書き込みにの中で自分の書き込みが成功した場合に関数 \verb+success()+が成功する。 |
12 | 71 JavaにはAtomicRefarenceが標準であるがC\#はなかったため、AtomicReferenceのClassを新たに作った。 |
0 | 72 |
13 | 73 \begin{itembox}[l]{AtomicReplace} |
0 | 74 \begin{verbatim} |
13 | 75 // C# |
76 public bool CompareAndSet(T newValue, T prevValue) { | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
77 T oldValue = value; |
6 | 78 return (oldValue |
12 | 79 != Interlocked.CompareExchange (ref value, newValue, prevValue)); |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
80 } |
13 | 81 |
82 // Java | |
83 | |
0 | 84 \end{verbatim} |
85 \end{itembox} | |
86 | |
13 | 87 %\section{Listの実装} |
88 木やリストをたどる時にJavaではIteratorを用いる。 | |
89 Iteratorは次の値があるかを返すboolean hasNext()と、Tという型の次の値を取ってくるT next()を持つObjectである。 | |
90 C\#では木やリストをたどりながらyeildで次の値を返す。 | |
0 | 91 |
12 | 92 \begin{itembox}[l]{ソースコード2 List.java} |
93 \begin{verbatim} | |
94 public Iterator<T> iterator() { | |
95 return new Iterator<T>() { | |
96 Node<T> currentNode = head.getNext(); | |
97 | |
98 @Override | |
99 public boolean hasNext() { | |
100 return currentNode.getAttribute() | |
101 != null; | |
102 } | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
103 |
12 | 104 @Override |
105 public T next() { | |
106 T attribute | |
107 = currentNode.getAttribute(); | |
108 currentNode | |
109 = currentNode.getNext(); | |
110 return attribute; | |
111 } | |
112 }; | |
113 } | |
114 \end{verbatim} | |
115 \end{itembox} | |
116 | |
117 C\#にはIEnumeratorがあるのでそれを利用した。 | |
118 ListのforeachではIteratorを呼び出すため、一つずつ要素を返す必要がある。 | |
119 yield returnステートメントを利用することで位置が保持され、次に呼ばれた際に続きから値の取り出しが可能になる。 | |
120 | |
121 \begin{itembox}[l]{ソースコード3 List.cs} | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
122 \begin{verbatim} |
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
123 public IEnumerator<T> iterator() { |
12 | 124 Node<T> currentNode = head.getNext(); |
125 while (currentNode.getAttribute() != null) { | |
126 yield return (T)currentNode.getAttribute(); | |
127 currentNode = currentNode.getNext (); | |
0 | 128 } |
12 | 129 } |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
130 \end{verbatim} |
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
131 \end{itembox} |
9 | 132 |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
133 \section{ベンチマーク} |
0 | 134 |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
135 UnityではSqlite3,PlayerPrefsがデータの保存として利用される。 |
3 | 136 今回の検証はInsertを1000回行い、push(またはSave)を行うまでの時間を測定する。 |
2 | 137 |
3 | 138 使用した機材は以下の通りである。 |
7 | 139 |
3 | 140 \begin{itemize} |
141 \item OS : Windows 10 | |
142 \item CPU : Intel Core i7-4700MQ 2.4GHz | |
12 | 143 \item Unity : 5.4.2f1 |
3 | 144 \end{itemize} |
2 | 145 |
11 | 146 %\begin{figure}[htbp] |
147 % \includegraphics[width=70mm]{pic/benchmark.pdf} | |
148 %\end{figure} | |
12 | 149 \begin{table}[htbp] |
150 \caption{速度測定} | |
151 \label{table:data_type} | |
152 \begin{tabular}{lcrr} \hline | |
153 データベース & 速度(ms) \\ \hline \hline | |
154 Jungle & 100 \\ | |
155 Sqlite3 & 100 \\ | |
156 PlayerPrefs & 100 \\ | |
11 | 157 \end{tabular} |
158 \end{table} | |
2 | 159 |
160 | |
0 | 161 \section{これからの作業} |
162 | |
2 | 163 Jungleは分散型のデータベースを目指しているため、MessagePackの実装を行う。 |
164 今後はサーバーとの連携も行う。 | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
165 JungleはRDBと異なりデータを自由に格納することができる。 |
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
166 そこでデータベース設計を確立させる必要がある。 |
0 | 167 |
168 \begin{thebibliography}{9} | |
169 | |
170 \bibitem{1} | |
1
93d15a2b6745
add section 'Jungle-Sharp implementation' and c# code.
Kazuma
parents:
0
diff
changeset
|
171 金川竜己 非破壊的木構造データベースJungleとその評価 |
0 | 172 \end{thebibliography} |
173 | |
7 | 174 \end{document} |