# HG changeset patch # User Kazuma # Date 1477064578 -32400 # Node ID 87907fc91f6233734ac5e6efa27b35986515b87b # Parent eba97f96547493650fa26c70e77cea90d94abf4c fix diff -r eba97f965474 -r 87907fc91f62 midterm.tex --- a/midterm.tex Sat Oct 22 00:04:57 2016 +0900 +++ b/midterm.tex Sat Oct 22 00:42:58 2016 +0900 @@ -49,6 +49,24 @@ 通信はMessagePackを基本に実装されている。 従って、C\#側でもMessagePackを用いてデータのやり取りを行いたい。 +図\ref{fig:clienttree}のようにクライアント側では2つのTreeを持っている。 +GameTreeからCommunityTreeにコピーする。 +サーバー側とはCommunityTreeで同期する。 + +図\ref{fig:servertree}のようにサーバー側ではPlayerごとにTreeを持っている。 + +\begin{figure}[h] +\includegraphics[width=2cm, bb=0 0 172 200]{pic/clientTree.pdf} +\label{fig:clienttree} +\captation{クライアント側の木構造} +\end{figure} + +\begin{figure}[h] +\includegraphics[width=2cm, bb=0 0 172 200]{pic/serverTree.pdf} +\label{fig:servertree} +\captation{サーバー側の木構造} +\end{figure} + Unityではデータの保存の際にSQlite3、PlayerPrefsといったDBがよく使われている。 PlayerPrefsとは、Unityに特化したバイナリ形式でKey,Valueのみで保存されるものである。 これらのDBにはObjectを直接格納することはできない。 @@ -59,7 +77,7 @@ %スムーズにできた部分を書く %Jungleがプログラミング言語に依存しないものだというのをかくほうがいい JavaとC\#はよく似た言語であり、移行はそれほど難しくはない。 -実際Jungleの中心部分である木構造とIndexを構成する赤黒木\cite{}のコードはほぼ変更なく移行できた。 +実際Jungleの中心部分である木構造とIndexを構成する赤黒木\cite{2}のコードはほぼ変更なく移行できた。 C\#ではインナークラスが使えないので明示的なクラスに変換する必要があった。 異なる部分は一つは木を変更した後、木のルートをAtomicに置き部分である。 @@ -67,7 +85,7 @@ %\section{AtomicRefefarenceの実装} % atomic reference問題 -Jungleの木の更新(commit)は、CAS(check and set*図1)を用いて atomic に行われる。競合している書き込みにの中で自分の書き込みが成功した場合に関数 \verb+success()+が成功する。 +Jungleの木の更新(commit)は、CAS(check and setを用いて atomic に行われる。競合している書き込みにの中で自分の書き込みが成功した場合に関数 \verb+success()+が成功する。 JavaにはAtomicRefarenceが標準であるがC\#はなかったため、AtomicReferenceのClassを新たに作った。 \begin{itembox}[l]{AtomicReplace} @@ -89,7 +107,7 @@ Iteratorは次の値があるかを返すboolean hasNext()と、Tという型の次の値を取ってくるT next()を持つObjectである。 C\#では木やリストをたどりながらyeildで次の値を返す。 -\begin{itembox}[l]{ソースコード2 List.java} +\begin{itembox}[l]{List.java} \begin{verbatim} public Iterator iterator() { return new Iterator() { @@ -118,7 +136,7 @@ ListのforeachではIteratorを呼び出すため、一つずつ要素を返す必要がある。 yield returnステートメントを利用することで位置が保持され、次に呼ばれた際に続きから値の取り出しが可能になる。 -\begin{itembox}[l]{ソースコード3 List.cs} +\begin{itembox}[l]{List.cs} \begin{verbatim} public IEnumerator iterator() { Node currentNode = head.getNext(); @@ -157,6 +175,9 @@ \end{tabular} \end{table} +Jungleが早い理由として赤黒木を使っている、データを書き出さずメモリ上にデータを持っているからである。 +Sqlite3が遅い理由としてはデータをInsertする毎にDBを書き込みを行っているからである。 +PlayerPrefsはデータを書き出すが、データをセットしたのち一度だけまとめて書き出すため早い。 \section{これからの作業} @@ -171,4 +192,9 @@ 金川竜己 非破壊的木構造データベースJungleとその評価 \end{thebibliography} +\bibitem{2} +: {これで分かった赤黒木}, {http://www.moon.sannet.ne.jp/okahisa/rb-tree/} +\end{thebibliography} + + \end{document} diff -r eba97f965474 -r 87907fc91f62 pic/clientTree.pdf Binary file pic/clientTree.pdf has changed diff -r eba97f965474 -r 87907fc91f62 pic/serverTree.pdf Binary file pic/serverTree.pdf has changed