# HG changeset patch # User Nobuyasu Oshiro # Date 1374123492 -32400 # Node ID b3bce5bacc049b4281875a2eadcacd00489798f4 # Parent 2132391fcb657b533eb93f54b867187be60fc120 wrote DefatltTreeOperationLogContainer diff -r 2132391fcb65 -r b3bce5bacc04 Paper/jssst.tex --- a/Paper/jssst.tex Thu Jul 18 10:14:24 2013 +0900 +++ b/Paper/jssst.tex Thu Jul 18 13:58:12 2013 +0900 @@ -215,11 +215,12 @@ Tree 編集の API として次の4つが用意されている. \begin{itemize} -\item \verb+addNewChildAt(NodePath _path,int _pos);+ -\item \verb+deleteChildAt(NodePath _path,int _pos);+ +\item \verb+addNewChildAt(NodePath _path,int _pos)+ +\item \verb+deleteChildAt(NodePath _path,int _pos)+ \item \verb+putAttribute(NodePath _path,+\\ \verb+String _key,ByteBuffer _value)+ -\item \verb+deleteAttribute(NodePath _path,String _key)+ +\item \verb+deleteAttribute(NodePath _path,+\\ +\verb+String _key)+ \end{itemize} \subsubsection{addNewChildAt} @@ -238,9 +239,9 @@ 削除する attribute は文字列のキーで指定する. \subsection{TreeOperationLog} -上記の API を使用すると Editor 内部では OperationLog として順次つまれていき, 最終 +上記の API を使用すると Editor 内部では NodeOperation として順次つまれていき, 最終 的に commit されることで編集が行われる. -複数の OperationLog の集まりを TreeOperationLog といい, これは編集の単位となる. +複数の NodeOperation の集まりを TreeOperationLog といい, これが編集の単位となる. 例えば, 後述する掲示板の実装では1つの書き込みに対して1つの Node を作成し, attribute を もたせている. その時のログは次のようになる. @@ -251,15 +252,37 @@ [PUT_ATTRIBUTE:<-1,1>:key:key,value:hoge] [PUT_ATTRIBUTE:<-1,1>:key:timestamp,value:0] \end{verbatim} +大文字の英字は実行した API を表す. <>により囲まれている数値は NodePath を示す. -このログの塊が1つの TreeOperationLog となる. +NodePath の後ろは posision や attribute の情報を表している. +NodeOperation と NodePath の組み合わせを TreeOperation として扱い, それらいくつか集まりが TreeOperationLog となる. -\subsection{Alice を用いた分散実装} +\section{Alice を用いた Jungle の分散実装} +Alice を用いた Jungle のデータ分散は, 上記の TreeOperationLog を Data Segment として扱うことで行える. +そのために必要なことは以下となる. +\begin{itemize} +\item TreeOperationLog を MessagePack によりシリアライズ +\item TreeOperationLog を扱う Data Segment の作成 +\item Data Segment として受け取った TreeOperationLog の Jungle への適応 +\end{itemize} - +\subsection{TreeOperationLog の MessagePack によるシリアライズ} +TreeOperationLog はいくつかの TreeOperation を List で保持している. +そして TreeOperation は NodeOperation と NodePath を保持し, NodePath は +Integer の List となっている. -\section{その3} +これらを MessagePack でシリアライズするために, それぞれのシリアライズを +行う Container クラスの作成を行った. +それらを保持し最終的には DefaultTreeOperationLogContainer というクラスの作成を行う. +このクラスは TreeOperationLog を Value 型として保持し, 他に木の名前やリビジョン番号 +と言った情報も保持する. +Data Segment へログを put するときはこの DefaultTreeOperationLogContainer クラスを使用する. + +\subsection{} +\subsection{} +\subsection{} + \section{その4}