Mercurial > hg > Papers > 2016 > tatsuki-prosym
changeset 7:3321ed776bbb
merge
author | Kazuma |
---|---|
date | Thu, 10 Nov 2016 18:47:14 +0900 |
parents | 4eb016a1f66c (current diff) ae5b9b310397 (diff) |
children | 36f400a632c1 234f66b19be4 |
files | |
diffstat | 7 files changed, 40 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/bbs.tex Thu Nov 10 18:45:38 2016 +0900 +++ b/bbs.tex Thu Nov 10 18:47:14 2016 +0900 @@ -1,11 +1,12 @@ \section{BBS} -Jungle実装時木に対する変更はEditorを用いたコード上でしか行えず、非常に非効率的であり、構築した木構造を表示する機能も無かった。 +Jungle実装時木に対する変更はEditorを用いたコード上でしか行えず、非効率的であり、また、構築した木構造を表示する機能も無かった。 それらの問題を解決するため、BBSの実装を行った。 フロントエンドには組み込みウェブサーバーであるJettyを使用した。 \subsection{BBSを使った木構造の表示} -BBSは、Pathで指定したNodeの中身を可視化する機能の実装を行う。 - +BBSに、Pathで指定したNodeの中身を可視化する機能の実装を行った。 +%BBSではなくWEBサーバー上でのJungleの使用 +図\ref{printNode}は、BBSがNodeを可視化するまでの流れである。 \begin{figure}[h] \begin{center} \includegraphics[height = 6cm , bb=0 0 622 497]{images/printNodeValue.pdf} @@ -27,7 +28,7 @@ \subsection{BBSを使った木の編集} -図\ref{JungleEdit}はBBSを用いたJungleの木の更新の様子である。 +図\ref{JungleEdit}はBBSを用いたJungleの木の更新の流れである。 \begin{figure}[h] \begin{center} \includegraphics[height = 10cm , bb=0 0 622 971]{images/TreeEdit.pdf} @@ -52,5 +53,5 @@ \end{enumerate} -編集機能を実装したことにより木構造を構築する際にコードを書く必要がなくなった。 +編集機能を実装したことにより木構造を構築する際にEditorを使ったコードを書く必要がなくなり、直感的に木構造への操作を行えるようになった。
--- a/introduction.tex Thu Nov 10 18:45:38 2016 +0900 +++ b/introduction.tex Thu Nov 10 18:47:14 2016 +0900 @@ -2,7 +2,7 @@ プログラムからデータを分離してRDBとして扱う手法には、プログラム中のデータ構造とRDBの表構造がマッチしないという問題が知られている。 例えばRPGゲーム中のユーザが持つアイテムという単純なものでもRDBではユーザとアイテムの組をキーとする巨大な表として管理することになり、ユーザオブジェクトが持つアイテムリストというプログラムの中のデータ構造とのギャップが大きい。 Mapなどの手法や持続的データ構造などの研究が行われてきたが解決には至っていない。一方でデータベース自体もRDBと方向の違う表に特化したKey Value Storeや、Jsonなどの不定形のデータ構造を格納するように機能拡張されてきている。 -当研究室では、こ れらの問題を解決した煩雑なデータ設計が必要のない データベースを目指して非破壊的木構造データベースJungleを開発している。 +当研究室では、これらの問題を解決した煩雑なデータ設計が必要のない データベースを目指して非破壊的木構造データベースJungleを開発している。 Jungleはプログラム内部に直接木構造を構築し、そのルートをアトミックに入れ替えることでトランザクションを実現する。 また木構造の表現に単一リンクを用い、変更を非破壊的つまり、元の木を保存しつつ、新しい木を構築する方法を取る。プログラムは、この木を内部のデータ構造として直接取り扱うことができるので、読み出し時にデータベースに問い合わせる必要がない。また汎用の木構造を持つので、データベースを特に設計しなくても、あるがままの形で格納することが可能になっている。 本研究では実際にJungle上に実際に複数のアプリケーションを実装し、Jungleの表現力、機能の十分性、実用的な性能があるか、実証実験を行う。
--- a/jungle.tex Thu Nov 10 18:45:38 2016 +0900 +++ b/jungle.tex Thu Nov 10 18:47:14 2016 +0900 @@ -6,7 +6,7 @@ そのため、読み込みと書き込みを同時に行うことができる。 \subsection{木の生成} -Jungleには木を生成等を行うため、表\ref{jungleAPI}で定義されているAPIが実装されている。 +Jungleには木を生成、管理を行うAPI(*表\ref{jungleAPI})が実装されている。 \begin{table}[htb] \begin{center} \caption{Jungleに実装されているAPI} @@ -24,7 +24,6 @@ \end{table} -Jungleは複数の木を保持しており、それらは名前で管理されている。 \subsection{木の編集} Jungleの木の編集はJungleTreeEditorを用いて行われる。 @@ -66,7 +65,7 @@ 型を返す。 これはエラーの場合はErrorが格納されており、編集が成功した場合JungleTreeEditorを保持する。 編集後に返されるJungleTreeEditorは、編集された木構造を保持しているため、編集前の木構造を保持しているJungleTreeEditorとは別のオブジェクトである。 -編集を行った後は、editor.successで今までの編集をコミットすることができる。その際他のJungleTreeEditorによってTreeが更新されていた場合はコミットに失敗する。 +編集を行った後は、editor.success()で今までの編集をコミットすることができる。その際他のJungleTreeEditorによって木が更新されていた場合はコミットに失敗する。 その場合は最初からやり直す必要がある。 @@ -84,10 +83,10 @@ \end{lstlisting} \begin{enumerate} -\item tree.getEditor(e)木からJungleTreeEditorを取得する -\item 次に変更するNodeの場所を指すNodePathを作成する -\item editor.addNewChildAtでrootの子供の0番目にNodeを追加する -\item 返り値のEitherがErrorを保持していないか(編集しに失敗していないか)を確認する +\item tree.getEditor()でtreeからJungleTreeEditorを取得する +\item 次に変更するノードの場所を指すNodePathを作成する +\item editor.addNewChildAtでpathで指定したノードの子供の0番目に子ノードを追加する +\item 返り値のEitherがErrorを保持していないか(編集に失敗していないか)を確認する \item Errorを保持していた場合Exceptionを投げる \item Editorを持っていた場合木の変更をコミットする \end{enumerate}
--- a/maTrix.tex Thu Nov 10 18:45:38 2016 +0900 +++ b/maTrix.tex Thu Nov 10 18:47:14 2016 +0900 @@ -1,5 +1,6 @@ \section{許認可管理アプリケーション\\maTrix} -BBSを実装した後、Jungle上に実際に企業で運用されている許認可管理アプリケーションmaTrixを実装し、データベースとしての表現力、機能の十分性、実用的な性能があるか、実証実験を行ことになった。 +BBSを実装した後、Jungle上に実際に企業で運用されている許認可管理アプリケーションmaTrixを実装し、データベースとしての表現力、機能の十分性、実用的な性能があるか、実証実験を行なった。 + maTrixは、人、役職、役割、権限、組織等の木構造のデータとポリシーファイルを持つ。maTrixの組織構造はデータ同士がidを用いた参照を行うことで表現される。また組織構造は版管理されている。 ポリシーファイルは、データに対するアクセス要求が許可されるか否認されるかを判断するためのルールを誰が(Target)、何を(Resource)、どうできるか(Action)の3つの要素で記述されている。maTrixはアクセス要求に応じたポリシーファイルを参照することで許認可の判断を行う。 ポリシーファイルは組織構造中の人や役職をidを用いて参照している。つまり、ポリシーファイルを用いて許認可を下すためには、その人がどこの組織に所属して。その役割がどの権限を持っているかを返す検索が必要になる。 @@ -19,10 +20,13 @@ また、maTrixは自身のデータをXML形式で書き出すことが可能である。書き出したデータをJungleに格納するためにXMLReaderの実装も行った。 +\newpage \subsection{Indexの実装} -Jungle上でのmaTrixの組織構造の表現は、IdをIndexで参照し表現する。 +% Jungleに含まれる複数の木のノードを相互参照したい +% 木のノードにIDを割ふってIndexを用いて参照する +Jungle上でのmaTrixの組織構造の表現は、IndexとIdを用いた参照で表現する。 しかし、JungleにはIndexが無かったため実装を行った。 -Jungleは過去の版のデータを全て保持しているため、全ての版に独立したIndexが必要となる。 +Jungleは過去の版の木構造を全て保持しているため、全ての版に独立したIndexが必要となる。 そのため、Indexを破壊すること無く更新する必要があった。 よって、非破壊TreeMapを自作し、それを用いてIndexの実装を行った。 このTreeMapは、データの更新を行った際、前の版と最大限データを共有した新しいTreeMapを作成する。 @@ -90,7 +94,7 @@ しかし、Jungleは非破壊という性質上、子に親への参照をもたせることが難しいため、Nodeを渡すと親Nodeを返すParentIndexを実装した。 -\subsubsection{性能測定} +\subsection{性能測定} maTrixの実装後、Jungleに実用的な性能があるか確かめるために測定を行った。 比較対象にはMongoDBを選択した。 図\ref{fig:compare}はmongoDBとJungleの速度比較のグラフである。
--- a/main.tex Thu Nov 10 18:45:38 2016 +0900 +++ b/main.tex Thu Nov 10 18:47:14 2016 +0900 @@ -41,6 +41,10 @@ % はじめに \input{abst.tex} +\begin{jkeyword} +プログラミング・シンポジウム,データベース、Java、Jungle +\end{jkeyword} + \maketitle % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- a/renderingEngine.tex Thu Nov 10 18:45:38 2016 +0900 +++ b/renderingEngine.tex Thu Nov 10 18:47:14 2016 +0900 @@ -1,4 +1,5 @@ \section{HtmlRenderingEngine} +前章でJungleに実用データベースたる性能があることが分かったので、実際にJungle上に例題アプリケーションとしてHtmlRenderingEngineの開発を行った。 HtmlRenderingEngineは、出力するデータが記述されたContextTree、出力する形式が記述されたLayoutTreeの2つの木構造を持ち、これらを参照しながらhtmlのRenderingを行う。 本章ではRenderingEngineの実装と発生した問題、解法について解説する。 またRenderingする例題はDiaryを選択した。 @@ -36,8 +37,8 @@ \subsection{Layout} -htmlの出力形式を定義するLayoutは複数のComponentからなり、それらはComponentNameを用いた参照で表現されている。 -LayoutTreeは図\ref{layoutTree}のようにデータを格納した。 +htmlの出力形式を定義するLayoutは複数のComponentからなる。 +LayoutTreeには図\ref{layoutTree}のようにデータを格納した。 \begin{figure}[h] @@ -49,8 +50,8 @@ \end{figure} LayoutTreeはNodeName : displayinformationの組で値を保持するNode1の子に複数のComponentを保持する -LayoutTreeのComponentはdisplayComponentName -\textgreater NodeNameの単一的な参照を行っている。 -Node3は、"use" = "text"のペアでタグを保持しているため、日記の本文に対応する記述が行ってあることがわかる。 +ComponentはdisplayComponentName -\textgreater NodeNameの単一的な参照を行っている。 +Node3は、"use" = "text"のペアでタグを保持しているため、ContentTreeの日記の本文に対応する記述が行ってあることがわかる。 表\ref{tag}にタグとcontextの対応を記述する \begin{table}[htb] @@ -68,12 +69,12 @@ \end{center} \end{table} - +\newpage layoutが複数のComponentを参照する際は図\ref{multiComponent}のような木構造を構築する。 \begin{figure}[h] \begin{center} -\includegraphics[height = 6cm , bb=0 0 918 676]{images/multiComponent.pdf} +\includegraphics[height = 6cm , bb=100 0 918 676]{images/multiComponent.pdf} \caption{複数のComponentを参照するLayout} \label{multiComponent} \end{center} @@ -84,7 +85,7 @@ \subsection{LayoutTreeのデータ設計} Jungleは汎用の木構造を持つので、データベースを特に設計しなくても、あるがままの形で格納することが可能である。 しかし、設計を行うことでより効率的に木構造を扱うことが可能になる。 -図\ref{goodTree}、図\ref{badTree}は同じデータを格納した2つの木の一部である。 +図\ref{goodLayoutTree}、図\ref{badLayoutTree}は同じデータを格納した2つの木の一部である。 \begin{figure}[h] \begin{center} @@ -114,18 +115,18 @@ \subsection{性能評価} -本章では、図\ref{goodLayoutTree}の木を使ったRenderingEngineと、図\ref{badLayoutTree}を使ったRenderinEngineの性能測定を行い、木の構造が実行速度にどれだけ影響するかを確かめる。 +本節では、図\ref{goodLayoutTree}の木と図\ref{badLayoutTree}を使った2つのRenderinEngineの性能測定を行い、木の構造が実行速度にどれだけ影響するかを確かめる。 測定は100000回のRenderingRequestを処理するまでの時間の比較で行う。 図\ref{fig:BenchMark}が性能測定結果のグラフである。 -きちんと設計を行った木の方が高速にRenderingを行えていることがわかる。 +設計を行った木の方が高速にRenderingを行えている。 \begin{figure}[h] -\begin{center} -\includegraphics[height = 8cm , bb=0 0 792 612]{images/benchMarck.pdf} +\begin{flushleft} +\includegraphics[height = 8cm , bb=150 0 792 612]{images/benchMarck.pdf} \caption{性能評価} \label{fig:BenchMark} -\end{center} +\end{flushleft} \end{figure} 測定結果より、Jungleデータベースはデータの設計を行うこと無く格納可能だが、設計を行ったほうがプログラム内のデータ構造とギャップがなく、高速に動作するプログラムを簡潔に記述できるようになる事がわかる。
--- a/summary.tex Thu Nov 10 18:45:38 2016 +0900 +++ b/summary.tex Thu Nov 10 18:47:14 2016 +0900 @@ -1,5 +1,6 @@ +\newpage \section{まとめ} -本研究では非破壊データベースJungleにBBS、許認可管理アプリケーションmaTrix、HtmlRenderingEngineを実装した。 +本研究では非破壊データベースJungleにBBS、許認可管理アプリケーションmaTrix、HtmlRenderingEngineの3つを実装した。 BBSを実装したことにより、ブラウザから木構造の確認、編集が行えるようになり、ユーザーは煩雑なEditorから開放された。 次に、Jungle上に許認可管理アプリケーションmaTrixの実装を行い、Jungleに実用データベースとしての表現力、機能の十分性、実用的な性能があるか実証実験を行った。 maTrixは複数の木がお互いにIdを用いた参照を行い組織構造を表現していたが、JungleではIndexを用いた参照で表現した。