changeset 1:0d653b7c0706

add mm
author tatsuki
date Wed, 09 Nov 2016 17:34:11 +0900
parents 4768ccce25f4
children 031742e63cf2
files bbs.tex introduction.tex jungle.tex maTrix.tex prosin.xmind renderingEngine.tex
diffstat 6 files changed, 134 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/bbs.tex	Wed Nov 09 10:05:42 2016 +0900
+++ b/bbs.tex	Wed Nov 09 17:34:11 2016 +0900
@@ -1,1 +1,2 @@
+\section{BBS}
 bbsについて書く
--- a/introduction.tex	Wed Nov 09 10:05:42 2016 +0900
+++ b/introduction.tex	Wed Nov 09 17:34:11 2016 +0900
@@ -4,5 +4,5 @@
 Mapなどの手法や持続的データ構造などの研究が行われてきたが解決には至っていない。一方でデータベース自体もRDBと方向の違う表に特化したKey Value Storeや、Jsonなどの不定形のデータ構造を格納するように機能拡張されてきている。
 当研究室では、こ れらの問題を解決した煩雑なデータ設計が必要のない データベースを目指して非破壊的木構造データベースJungleを開発している。
 Jungleはプログラム内部に直接木構造を構築し、そのルートをアトミックに入れ替えることでトランザクションを実現する。
-また木構造の表現に単一リンクを用い、変更を非破壊的つまり、元の木を保存しつつ、新しい木を構築する方法を取る。プログラムは、この木を内部のデータ構造として直接取り扱うことができるので、読み出し時にデータベースに問い合わせる必要がない。また汎用の木構造を持つので、データベースを特に設計しなくても、あるがままの形で格納することが可能になっている。Jungleは分散構成も可能である。
+また木構造の表現に単一リンクを用い、変更を非破壊的つまり、元の木を保存しつつ、新しい木を構築する方法を取る。プログラムは、この木を内部のデータ構造として直接取り扱うことができるので、読み出し時にデータベースに問い合わせる必要がない。また汎用の木構造を持つので、データベースを特に設計しなくても、あるがままの形で格納することが可能になっている。
 本研究では実際にJungle上に実際に複数のアプリケーションを実装し、Jungleの表現力、機能の十分性、実用的な性能があるか、実証実験を行う。
--- a/jungle.tex	Wed Nov 09 10:05:42 2016 +0900
+++ b/jungle.tex	Wed Nov 09 17:34:11 2016 +0900
@@ -1,7 +1,7 @@
 \section{非破壊的木構造データベースJungle}
 \subsection{Jungleのデータ構造}
-Jungleは複数の木の集合からなり木は複数のノードの集合で出来ている。
+Jungleは複数の木の集合からなり、木は複数のノードの集合で出来ている。
 ノードは自身の子のListと属性名と属性値の組を持つ。
 Jungleは非破壊的木構造であるためデータの編集は一度生成した木を上書きせず、ルートから編集を行うノードまでコピーを行い新しく木構造を構築することで行う。
 そのため、読み込みと書き込みを同時に行うことができる。
-他にも本研究室で開発を行っている分散フレームワークAliceを用いて作られた分散木構造データベースJungle。Unityに対応したC\#版Jungleもある。
+また、本研究室で開発を行っている分散フレームワークAliceを用いて作られた分散木構造データベースJungle。Unityに対応したC\#版Jungleもある。
--- a/maTrix.tex	Wed Nov 09 10:05:42 2016 +0900
+++ b/maTrix.tex	Wed Nov 09 17:34:11 2016 +0900
@@ -19,18 +19,19 @@
 また、maTrixは自身のデータをXML形式で書き出すことが可能である。書き出したデータをJungleに格納するためにXMLReaderの実装も行った。
 
 \subsection{Indexの実装}
-Jungle上でのmaTrixの組織構造の表現はIdを用いたIndexの参照を用いて表現する。
+Jungle上でのmaTrixの組織構造の表現は、IdをIndexで参照し表現する。
 しかし、JungleにはIndexが無かったため実装を行った。
 Jungleは過去の版のデータを全て保持しているため、全ての版に独立したIndexが必要となる。
-そのため、Indexを破壊すること無く更新する必要があったため、非破壊TreeMapを自作し、それを用いてIndexの実装を行った。
+そのため、Indexを破壊すること無く更新する必要があった。
+よって、非破壊TreeMapを自作し、それを用いてIndexの実装を行った。
 このTreeMapは、データの更新を行った際、前の版と最大限データを共有した新しいTreeMapを作成する。
 これにより複数の版全てに対応したIndexをサポートすることが可能になった。
 以下にJungleにおけるIndexの型を記述する
 
-\begin{verbatim}
+\begin{lstlisting}[frame=lrbt,label=index,numbers=left]
 TreeMap<String key,TreeMap<String attribute,
   List<TreeNode> node> index> indexMap
-\end{verbatim}
+\end{lstlisting}
 
 JungleのIndexはIndexMap内に保持されている。
 属性名でIndexMapにgetを行うと、対応したIndexが取得できる。
@@ -88,6 +89,9 @@
 しかし、Jungleは非破壊という性質上、子に親への参照をもたせることが難しいため、Nodeを渡すと親Nodeを返すParentIndexを実装した。
 
 
+
+\subsection{}
+
 \if0
 \subsubsection{性能測定}
 maTrixの実装後、性能測定を行った。
Binary file prosin.xmind has changed
--- a/renderingEngine.tex	Wed Nov 09 10:05:42 2016 +0900
+++ b/renderingEngine.tex	Wed Nov 09 17:34:11 2016 +0900
@@ -1,6 +1,124 @@
 \section{HtmlRenderingEngine}
-HtmlRenderingEngineは、htmlとして出力するデータが記述されたContextTree、どのように出力するか記述されたLayoutTreeの2つの木構造を持つ。
-Renderingを行う際には、LayoutTreeのNodeを順番に参照し、それに対応した出力データをContextTreeから取得する。
-その後、出力部分が確定次第出力していく。
+HtmlRenderingEngineは、出力するデータが記述されたContextTree、出力する形式が記述されたLayoutTreeの2つの木構造を持ち、これらを参照しながらhtmlのRenderingを行う。
+本章ではRenderingEngineの実装と発生した問題、解法について解説する。
+またRenderingする例題はDiaryを選択した。
+
+\subsection{ContentTreeのJungle上での表現}
+RenderingEngineではContentTreeに図\ref{fig:badLayoutTree}のようにデータを格納した。
+
+\begin{figure}[h]
+\begin{center}
+\includegraphics[height = 6cm , bb=0 0 226 185]{images/buildingNow.pdf}
+\caption{ContextTree}
+\label{fig:badLayoutTree}
+\end{center}
+\end{figure}
+
+
+RootNodeはContentのtitle、日時、Renderingする時に参照するLayout名を持つ。
+そして子ノードが本文、image等のデータを持つ。
+
+\subsection{Layout}
+htmlの出力形式を定義するLayoutは複数のComponentからなり、それらはComponentNameを用いた参照で表現されている。
+以下の記法で記述される
+\begin{lstlisting}[frame=lrbt,label=Layout,numbers=left]
+"rootSample@componentNames" = {
+  root = "diaryText@component"
+};
+
+
+"diaryText@component" = {
+  "use" = "text";
+  "size" = "4";
+  "color" = "#ff0000";
+};
+\end{lstlisting}
+
+上記のrootSample@componentNamesがlayoutのRootである。
+ContentTreeはRenderingを行う際に参照するRootcomponentNameを持つので、対応するNodeが参照される。
+2行目よりこのComponentはdiaryText@Componentを参照している。
+diaryText@Componentは7行目の"use" = "text"タグより、日記の本文に対応する記述が行ってあることがわかる。
+8行目には本文の文字サイズが、9行目には本文の文字色が定義されている
+表\ref{tag}にタグとcontextの対応を記述する
+
+\begin{table}[htb]
+  \begin{center}
+    \caption{tagとcontextの対応}
+      \begin{tabular}{|c|c|}        \hline
+        tag   & context          \\ \hline 
+        image & 画像の表示       \\ \hline 
+        cals  & table            \\ \hline
+        date  & 日付の表示       \\ \hline
+        text  & 日記の本文       \\ \hline
+        title & 日記のタイトル   \\ \hline
+      \end{tabular}
+    \label{tag}
+  \end{center}  
+\end{table}
+
 
-\subsection{Jungle上でのLayoutTreeの}
+layoutがComponentを参照する際はlistを用いた記述を行う。
+以下にlistを用いた例を記述する
+\begin{lstlisting}[frame=lrbt,label=Layout,numbers=left]
+"diaryMulti@component" = {
+  "list" = (
+      {
+      displayComponentName = "diaryText@component";
+      },{
+      displayComponentName = "diaryImage@component";
+      }
+      );
+};
+\end{lstlisting}
+
+上記の例では、diaryMulti@componentはdiaryText@componentとdiaryImage@componentを参照している。
+
+
+\subsection{LayoutTreeのデータ設計}
+LayoutをJungleTreeに格納する際に、図\ref{fig:badLayoutTree})のように格納した。
+
+\begin{figure}[h]
+\begin{center}
+\includegraphics[height = 6cm , bb=0 0 226 185]{images/buildingNow.pdf}
+\caption{コードとギャップのあるLayoutの格納方法}
+\label{fig:badLayoutTree}
+\end{center}
+\end{figure}
+
+
+
+
+
+Renderingする際に必要な値が別Nodeに分散されて保存されているため、RenderingEngineで使用するデータ構造とギャップがある。
+全てのNodeを参照し、値を集める処理を行う必要があり、コードの可読性が下がり余計な処理も増えてしまった。
+
+
+
+
+そこでLayoutTreeのデータ構造をきちんと定義し、図\ref{fig:goodLayoutTree}のように格納した
+\begin{figure}[h]
+\begin{center}
+\includegraphics[height = 6cm , bb=0 0 226 185]{images/buildingNow.pdf}
+\caption{コードとギャップのないLayoutの格納方法}
+\label{fig:goodLayoutTree}
+\end{center}
+\end{figure}
+
+図\ref{fig:badLayoutTree}と違い1つのNodeの必要な値がまとめて格納されている。
+そのため、RenderingEngineで使用するデータ構造とギャップがなく、簡潔にコードを書くことができるようになった。
+
+
+\subsection{性能評価}
+本章では前節で説明したギャップのあるLayoutTreeを使用したRenderingEngineとギャップのないLayoutTreeを使用したRenderingEngineの性能評価を行う
+
+測定は---------------で行う
+
+\begin{figure}[h]
+\begin{center}
+\includegraphics[height = 6cm , bb=0 0 226 185]{images/buildingNow.pdf}
+\caption{性能評価}
+\label{fig:BenchMark}
+\end{center}
+\end{figure}
+
+図\ref{fig:BenchMark}より--------------ということがわかる