Mercurial > hg > Papers > 2016 > tatsuki-prosym
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の実装後、性能測定を行った。
--- 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}より--------------ということがわかる