Mercurial > hg > Papers > 2016 > tatsuki-prosym
changeset 31:11dc58bf5a2b
fix
author | tatsuki |
---|---|
date | Tue, 29 Nov 2016 18:36:23 +0900 |
parents | 4845a4f7b02a |
children | 8512227869d5 |
files | bbs.tex jungle.tex |
diffstat | 2 files changed, 30 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/bbs.tex Tue Nov 29 17:59:09 2016 +0900 +++ b/bbs.tex Tue Nov 29 18:36:23 2016 +0900 @@ -4,9 +4,9 @@ よって、組み込みWEBサーバーであるJettyを使用し、Servletとして木の表示と編集を実現した。 \subsection{木構造の表示} -Jungle DBはWEBサーバー内に存在し、それから表示に必要なHTMLを生成してブラウザに転送する。 -図\ref{printNode}は、サーバからデータを送りブラウザ上でノードを可視化するまでの流れである。 -この流れはJungleのNodePathの処理を除けば通常のデータベースのレコードの表示と同等である。 +JungleTreeブラウザにおいて、Jungle DBはWEBサーバー内に存在し、それから表示に必要なHTMLを生成してブラウザに転送する。 +図\ref{printNode}は、サーバからデータを送り、ブラウザ上でノードを可視化するまでの流れである。 +この流れは、JungleのNodePathの処理を除けば通常のデータベースのレコードの表示と同等である。 \begin{figure}[h] \begin{center} \includegraphics[height = 6cm , bb=0 0 622 497]{images/printNodeValue.pdf} @@ -16,9 +16,9 @@ \end{figure} \begin{enumerate} -\item ユーザーは表示したいノードのパスをJungleTreeブラウザに送る。 +\item ユーザーは表示したいノードのパスを、JungleTreeブラウザに送る。 \item JungleTreeブラウザは、WEBサーバ内にあるJungleから、対応した木を取得する。 -\item JungleTreブラウザは、パスで指定した位置のノードを返す関数tree.getNodeOfPath()を用いて、木から表示するノードを取得する。 +\item JungleTreブラウザは、パスで指定した位置のノードを返す関数、tree.getNodeOfPath()を用いて、木から表示するノードを取得する。 \item (3)で取得したノードの中身を、JungleTreeブラウザが表示する。 \end{enumerate} @@ -43,17 +43,17 @@ \end{figure} \begin{enumerate} -\item ユーザーはJungleTreeブラウザで編集したいノードを表示するページに移動する -\item ユーザーはJungleTreeブラウザに木の変更要求を送る -\item JungleTreeブラウザはWebサーバー内にあるJungleから、対応した木を取得する -\item 木からJungleTreeEditorクラスを取得する -\item JungleTreeEditorクラスを使用して木の変更を行う -\item 木の変更をJungleにコミットする -\item 木の変更の結果を表示する +\item ユーザーはJungleTreeブラウザで編集したいノードを表示するページに移動する 。 +\item ユーザーはJungleTreeブラウザに木の変更要求を送る。 +\item JungleTreeブラウザはWebサーバー内にあるJungleから、対応した木を取得する。 +\item 編集を行う木から、JungleTreeEditorクラスを取得する。 +\item JungleTreeEditorクラスを使用して木の変更を行う。 +\item 木の変更をJungleにコミットする。 +\item 木の変更の結果を表示する。 \end{enumerate} -パスを使用することにより木の変更をRestfulに行うことができるように見えるが、木のパスは特定の木の版に固有のものである。 -ブラウザとWEBサーバはセッションで結合されており、そのセッションが同じ版の木を編集していれば問題なく成功する。 +パスを使用することにより、木の変更をRestfulに行うことができるように見えるが、木のパスは特定の木の版に固有のものである。 +ブラウザとWEBサーバは、セッションで結合されており、そのセッションが同じ版の木を編集していれば問題なく成功する。 ただし、編集し終わった時に、他の編集が割り込んでいたら、その編集は無効となる。この点が既存のRDBとは異なる。 また巨大な木を操作する時には、Pathを直接URLに含むことはできないので、他の工夫が必要になると考えられる。 このアプリケーションでは任意の木を取り扱うので、木の大きさの現実的な制限を除けば木の設計の問題はない。
--- a/jungle.tex Tue Nov 29 17:59:09 2016 +0900 +++ b/jungle.tex Tue Nov 29 18:36:23 2016 +0900 @@ -8,7 +8,7 @@ Jungleは、データの編集を一度生成した木を上書きせず、ルートから編集を行うノードまでコピーを行い新しく木構造を構築し、そのルートをアトミックに入れ替えることで行う(図\ref{nonDestractTreeEdit})。 -その際、編集に関係ないノードは参照を行い、複製元の木と共有する。 +その際、編集に関係ないノードは参照を行い、複製元の木と共有する(図\ref{nonDestractTreeEdit}の例ではノードB D Eは編集に関係ないためノードAから参照を行い、過去の木と共有を行っている)。 これを非破壊的木構造と呼ぶ。非破壊木構造は新しい木を構築している時にも、現在の木を安定して読み出せるという特徴がある。 しかし、書き込み時の手間は大きくなる。 @@ -21,13 +21,11 @@ \label{nonDestractTreeEdit} \end{center} \end{figure} -図\ref{nonDestractTreeEdit}の例ではノードB D Eは編集に関係ないためノードAから参照を行い、過去の木と共有を行っている。 - -通常のRDBと異なり、Jungleは木構造をそのまま読み込むことができる。例えば、XMLやJsonで記述された構造をデータベースを設計することなく読み込むことが可能であり、実際、そのような機能が実装されている。この木をそのままデ -ータベースとして使用することも可能である。しかし、木の変更の手間は木の構造に依存する。 +\newpage +通常のRDBと異なり、Jungleは木構造をそのまま読み込むことができる。例えば、XMLやJsonで記述された構造を、データベースを設計することなく読み込むことが可能であり、実際、そのような機能が実装されている。この木をそのままデータベースとして使用することも可能である。しかし、木の変更の手間は木の構造に依存する。 %特に非破壊木構造を採用しているJungleでは木構造の変更にo(1)からo(n)の様々な選択肢がある。つまり、アプリケーションに合わせて木を設計しない限り、 -特に非破壊木構造を採用しているJungleでは木構造の変更の手間はO(1)からO(n)となる。つまり、アプリケーションに合わせて木を設計しない限り、 +特に非破壊木構造を採用しているJungleでは、木構造の変更の手間はO(1)からO(n)となる。つまり、アプリケーションに合わせて木を設計しない限り、 十分な性能を出すことはできない。逆に言えば、正しい木の設計を行えば高速な処理が可能である。 Jungleは基本的にon memoryで使用することを考えており、一度、木のルートを取得すれば、その上で木構造として自由にアクセスして良い。 @@ -55,11 +53,11 @@ \end{center} \end{table} - +\newpage \subsection{TreeNode} -Jungleが保持している木は複数のノードの集合で出来ている。 -ノードは自身の子のListと属性名と属性値の組でデータを持つ。 -ノードに対するアクセスは表\ref{TreeNodeAPI}に記述されているAPIを用いて行われる。 +Jungleが保持している木は、複数のノードの集合で出来ている。 +ノードは、自身の子のListと属性名と属性値の組でデータを持つ。 +ノードに対するアクセスは、表\ref{TreeNodeAPI}に記述されているAPIを用いて行われる。 \begin{table}[htb] \begin{center} @@ -109,6 +107,7 @@ \end{center} \end{table} + \newpage 以下にルートノードの2番目の子供から、属性名 nameとペアになっている属性値を取得するサンプルコードを記述する。 \begin{lstlisting}[frame=lrbt,numbers=left,label=getAttributeCode] JungleTree tree = jungle.getTreeByName("TreeName"); @@ -136,7 +135,7 @@ \subsection{NodePath} -Jungleでは、木のノードの位置はNodePathクラスを使って表す。 +Jungleでは、木のノードの位置をNodePathクラスを使って表す。 NodePathクラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。また、ルートノードは例外として-1と表記される。 NodePathクラスが\textless -1,1,2,3\textgreater を表している際の例を図\ref{NodePath}に記す。 \begin{figure}[h] @@ -197,11 +196,11 @@ \end{table} -編集後に返されるJungleTreeEditorクラスは、編集された木構造を保持しているため、編集前の木構造を保持しているJungleTreeEditorクラスとは別のオブジェクトである。 +編集後に返されるJungleTreeEditorクラスは、編集後の木構造を保持しているため、編集前の木構造を保持しているJungleTreeEditorクラスとは別のオブジェクトである。 編集を行った後は、関数editor.success()で今までの編集をコミットすることができる。その際他のJungleTreeEditorクラスによって木が更新されていた場合はコミットに失敗する。 その場合は最初からやり直す必要がある。 -以下にJungleTreeEditorクラスを使ったサンプルコードを記述する。 +以下にJungleTreeEditorクラスを用いて、木の編集を行うサンプルコードを記述する。 \begin{lstlisting}[frame=lrbt,numbers=left,label=editorCode] JungleTreeEditor editor = tree.getTreeEditor(); @@ -214,13 +213,13 @@ \end{lstlisting} \begin{enumerate} -\item 関数tree.getEditor()で変数treeからJungleTreeEditorクラスを取得する。 -\item 次に変更するノードの場所を指すNodePathクラスを作成する。 -\item 関数editor.addNewChildAtを用いて、変数pathで指定したノードの子供の0番目に子ノードを追加する。 +\item 関数tree.getEditor()で編集を行う木から、JungleTreeEditorクラスを取得する。 +\item 次に変更するノードの場所を示す、NodePathクラスを作成する。 +\item 関数editor.addNewChildAt()を用いて、変数pathで指定したノードの子供の0番目に子ノードを追加する。 \item 返り値の変数EitherがErrorクラスを保持していないか(編集に失敗していないか)を確認する。 \item Errorクラスを保持していた場合Exceptionを投げる。 \item 編集に成功していた場合、編集後のJungleTreeEditorクラスを取得する。 \item (6)で取得したJungleTreeEditorクラスを用いて木の変更をコミットする。 \end{enumerate} -これらのAPIによりJungleは木構造を格納、編集する機能を持っている。 +これらのAPIにより、Jungleは木構造を格納、編集する機能を持っている。