Mercurial > hg > Papers > 2013 > shoshi-master-2013 > paper
changeset 4:83ddc73ce79b
added chapter3,4,5
author | Shoshi TAMAKI |
---|---|
date | Tue, 12 Feb 2013 17:50:58 +0900 |
parents | 7501e309deed |
children | d90832759bbb |
files | abstract.tex appendix.tex chapter1.tex chapter2.tex chapter3.tex introduciton.tex master_paper.aux master_paper.dvi master_paper.lof master_paper.log master_paper.lot master_paper.pdf master_paper.tex master_paper.toc thanx.tex |
diffstat | 15 files changed, 1018 insertions(+), 271 deletions(-) [+] |
line wrap: on
line diff
--- a/abstract.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/abstract.tex Tue Feb 12 17:50:58 2013 +0900 @@ -1,4 +1,12 @@ \begin{abstract} - -アブストラクト +従来,ウェブサービスとは,サーバーサイドでクライアントからのリクエストを処理し,クライアントは結果の表示を担当してる. +しかし,スマートフォンやタブレット端末の普及によりサーバーサイドの負担が増大し,ウェブサービスがダウンする自体が多々見られるようになった. +そのため,スケーラビリティがウェブサービスにとって重要な性質の1つとなっている.\\ +スケーラビリティとは,ある複数のノードから構成される分散ソフトウェアがあるとき,その分散ソフトウェアに対して単純にノードを追加するだけで性能を線形に上昇させることが出来る性質である.\\ +分散システムと聞くと,ネットワークを想像しがちであるが,並列に動作するソフトウェアもスレッドも他のスレッドと協調動作する必要があるため,分散ソフトウェアである. +すなわち,マルチコア上で並列に動作するソフトウェアにおいて,コア数に比例して性能も上昇するようなアーキテクチャが必要になる. +またウェブサービスは,サーバーサイドにてスケーラビリティを確保することが多く,クライアント側は有効活用されないことが多い. +しかし,クライアントはウェブサービスの需要に比例して増加するため,クライアントを有効活用したスケーラビリティ確保も有効である.\\ + 本研究では,マルチコア上のスケーラビリティ確保のために非破壊的木構造を利用し,クライアントを活用するため分散版管理システムを参考にしたスケーラブルな分散コンテンツマネージメントシステムの設計と開発を行う. +また, 簡易掲示板システムを開発し, バックエンドとして本研究で開発した木構造データベースJungleとCassandraを用いた. 掲示板と本学科の並列計算環境を用いてスケーラビリティ検証を行った. \end{abstract}
--- a/appendix.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/appendix.tex Tue Feb 12 17:50:58 2013 +0900 @@ -2,5 +2,7 @@ \addcontentsline{toc}{chapter}{発表文献} \begin{itemize} -\item 河野研ゼミ +\item{Cassandraを用いたCMSのPCクラスタを用いたスケーラビリティ検証,\\ 玉城将士, 河野真治(琉球大学), \\ 日本ソフトウェア科学会27回大会 (2010年度) 講演論文集, Sep, 2010} +\item{Cassandraを使ったスケーラビリティのあるCMSの設計,\\ 玉城将士, 河野真治(琉球大学), \\ 情報処理学会, March, 2011} +\item{Cassandraと非破壊的木構造を用いたCMSのスケーラビリティ検証環境の構築, \\ 玉城将士, 河野真治(琉球大学), \\ 日本ソフトウェア科学会28回大会 (2011年度) 講演論文集, Sep, 2011} \end{itemize}
--- a/chapter1.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/chapter1.tex Tue Feb 12 17:50:58 2013 +0900 @@ -3,17 +3,17 @@ スケーラブルなシステムを開発するためには, スケーラブルな性能を測ることの出来る環境とどのようなシステムがスケーラブルであるか知ることが必要である. 本章では, スケーラブルな分散データベースCassandraを用いて検証を行う. スケーラビリテイを高めるための使い方には工夫が必要である. 検証では, 特に, CoreDuo などの安価だが非力なマシンの振舞を調べることを行なった. そしてその環境上でスケーラビリティを確認する実験手法とスケーラブルなシステムを構成する方法を考察する. + \section{スケーラビリティとは} スケーラビリティとは, 分散システムの性能がノードの数に対して線形に上昇するような性質である. 通常, システムの性能を上昇させる場合, 高価なサーバーを購入方法と安価なサーバーを複数用意し連携させる方法がある. 前者の方法をスケールアップと呼び, 後者の方法をスケールアウトと呼ぶ. 高価なサーバーを用意するより, 安価なサーバーを複数用意するほうがコストパフォーマンスが良い. しかし, スケールアップでは, 同じ古いサーバーで動作していたソフトウェアがそのまま高価なサーバーで動作させることが可能であるため簡単に性能を向上させることができるが, 複数のサーバーを連携させて性能を向上させるのは簡単なことではない. + +\newpage + \section{分散データベース Cassandra} Cassandraは, FaceBookが自社のために開発した分散Key-Valueストアデータベースであり,Dynamo\cite{dynamo}とBigTable\cite{bigtable}を合わせた特徴を持っている. 2008年にオープンソースとして公開され, 2009年にApache Incubatorのプロジェクトとなった. 2010年にはApacheのトップレベルプロジェクトとなり, 現在でも頻繁にバージョンアップが行われている. -\subsection{Google BigTable} -BigTableは, Googleが開発したデータベースの1つである. -\subsection{Amazon Dynamo} -Dynamoは, Amazonが開発したデータベースの1つである. \subsection{SEDA} SEDA(Staged Event-Driven Architecture)は, Cassandraで使用されているアーキテクチャである\cite{seda:1}\cite{seda:2}. 処理を複数のステージに分解しタスクキューとスレッドプールを用意し処理を行う. 処理の様子を図\ref{fig:SEDA}に示す. \\ タスクが各ステージのタスクキューに入ると, スレッドプールにどれかのスレッドがタスクキューの中からタスクを取り出し処理を行う. 処理が終わるとそのタスクを次のステージのタスクキューに入れる. 同様にして次のステージのスレッドプールがタスクキューからタスクを受け取り処理を行う.\\ @@ -79,6 +79,7 @@ \end{minipage} \end{figure} +\newpage \subsubsection{4Core8Threadsを搭載したコア数の多いサーバーを用いた検証} Read/Write共にMySQLの性能を超えることに成功した. Readにおいてはコア数が少ない場合に超えることが出来なかったが, 並列度が70度付近でMySQLを上回る性能がでていた.
--- a/chapter2.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/chapter2.tex Tue Feb 12 17:50:58 2013 +0900 @@ -260,7 +260,7 @@ \subsubsection{トラバース} グラフデータベースでのデータの検索方法はトラバースと呼ばれ, グラフ上を渡り歩く方法を示すことで目的のデータを取得する.\\ -トラバースは, 並列に効率よく行うことが可能であるためスケーラビリティに貢献できると考えられる. 以下にTinkerPopでのトラバース方法を示す. +トラバースは, 検索が枝分かれする場合, 並列に効率よく行うことが可能である. 以下にTinkerPopでのトラバース方法を示す. \begin{lstlisting}[frame=lrbt,label=src:property_graph_traverse_tinkerpop,caption=トラバースの例,numbers=left] graph.v(1).out('knows').out('father); @@ -275,7 +275,6 @@ 我々のシステムでは, トラバースを木構造の検索方法として採用する. 木構造はグラフ構造の1つであるため効率よく検索を行うことができると考えられるからである. -なぜならば, 複数の結果が得られるようなトラバース例を考える. このとき, \subsection{ブラウザサイドの実装} 近年のウェブブラウザはJavaScriptでかなり複雑な処理が可能になっている. その上, HTML5の制定によりウェブストレージやウェブソケットなどのIOまでサポートされるようになる. @@ -298,7 +297,7 @@ 通常, システムの負荷はクライアントの数に応じて増加する. 我々のシステムにおいてはクライアントはウェブブラウザに相当するため, ウェブブラウザをスケーラビリティに貢献できるようにすることでかなりの効果を期待できると考えられる. \section{全体の設計} -提案手法を用いたシステム全体の概略図を以下に示す. +これまで, 我々のシステムに有用であると考えられる方法と, システムを紹介してきた. 本節では, 提案手法を用いたシステム全体の概略図を以下に示す. \begin{figure}[!htbp] \begin{center} @@ -308,7 +307,16 @@ \label{fig:basic_architecture} \end{figure} -本システムでは, データ構造として木構造を採用する. 各サーバー・クライアントはそれぞれ木構造が保存されており, サーバーはサーバー同士で木構造のpush/pullを行い, クライアントはサーバーと木構造のpush/pullを行う. -前述した, スケーラブルにする方法, +本システムでは, データ構造として木構造を採用する. 各サーバー・クライアントはそれぞれ木構造が保存されており, サーバーはサーバー同士で木構造のpush/pullを行い, クライアントはサーバーと木構造のpush/pullを行う.\\ +サーバー対クライアント, サーバー対サーバーの通信はHTTPを採用し, どのサーバーもウェブブラウザを通してコンテンツへアクセスできるようにする.\\ +\subsection{サーバーサイド} +サーバーサイドは, Javaを用いて実装する. 木構造を管理する部分(木構造データベース部分)はライブラリとして実装され, ユーザーは木構造データベース部分のみを用いて実装することも可能である. +木構造データベース部分では, ネットワークへのアクセス方法を持たないため, 組み込みウェブサーバーであるJettyを用いてWebAPIを実装する. +サーバーサイドは, push/pullと木構造データベースのみであり, 木構造をHTMLにレンダリングする処理は行わない.\\ +\subsection{クライアントサイド} +クライアントサイドは, JavaScriptを用いて実装する. クライアント側でもサーバーと同等のAPIと機能を提供する. すなわち, クライアントサイドで木構造の編集, 保存, 検索を行う. +木構造の保存はHTML5の機能であるWebStorageやAppCache,IndexedDBを用いて保存する. +しかし, これらのストレージには容量制限があるため, 利用されていない木構造の破棄や, 更新をサーバー側から取得するする必要がある. +クライアントサイドはこの他にも, サーバー側とは違い木構造をレンダリングして表示する仕事を請け負う.
--- a/chapter3.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/chapter3.tex Tue Feb 12 17:50:58 2013 +0900 @@ -1,10 +1,416 @@ \chapter{分散コンテンツマネージメントシステムの実装} \section{はじめに} -はじめに -\section{開発環境} -\subsection{言語} -\section{全体の構造} +本章では, 分散コンテンツマネージメントシステムのサーバーサイド部分の実装について述べる. 前章では, 我々のシステムのおおまかな設計について説明した. +そこでは, サーバーサイドで木構造を管理するデータベースがあると述べた. ここでは, その木構造データベースについて詳細な設計について説明する. +最初に, 実装した木構造データベースの利用方法について述べ, 次に詳細な設計と実装について述べる. + +\section{木構造データベースJungle} +木構造データベースJungleは, Javaで実装された分散コンテンツマネージメントシステムのための木構造データベースである. +非破壊的木構造の方法に則ったAPIと, 木構造のトラバースするための方法を提供する. 分散コンテンツマネージメントシステムに組み込んで利用する予定で実装されているため, 他のシステムに組み込んで利用することも可能である. + +\subsubsection{木の作成} +はじめに, データベースオブジェクトと木の作成方法について述べる. +Jungleは複数の木を保持することが出来る. 木には名前がついており, 名前を利用して作成・編集・削除を行うことが出来る. + +\begin{lstlisting}[frame=lrbt,label=src:create_jungle,caption=データベースオブジェクトと木の作成,numbers=left] +import jp.ac.u_ryukyu.cr.ie.shoshi.jungle.*; +import jp.ac.u_ryukyu.cr.ie.shoshi.jungle.traverser.*; +import jp.ac.u_ryukyu.cr.ie.shohsi.jungle.editor.*; + +DefaultTraverser traverser = new DefaultTraverser(); +DefaultTreeEditor editor = new DefaultTreeEditor(traverser); +DefaultJungle jungle = new DefaultJungle(null,"sample",editor); + +JungleTree tree = jungle.createTree("name of new tree here"); +\end{lstlisting} + +DeafultJungleが, 木構造データベースのオブジェクトとなる. +jungle.createTreeメソッドを利用して木構造を作成する. もし, すでに木構造が存在している場合は, nullが返される. + +\subsubsection{木と木を構成するノード} +データベースオブジェクトを作成し, 木構造とルートノードを取得するためには以下のように記述する. + +\begin{lstlisting}[frame=lrbt,label=src:create_jungle,caption=木とノードの取得,numbers=left] +/* データベースの取得まで省略 */ +JungleTree tree = jungle.getTreeByName("your tree name here"); + +Node root = tree.getRootNode(); + +Children<Node> children = root.getChildren(); // 子供ノードのリスト +Attributes attributes = root.getAttributes(); // ノードが保持する辞書 + +ByteBuffer value = attributes.get("key name"); +Node child = children.at(2); +\end{lstlisting} + +jungle.getTreeByNameメソッドで名前を指定して木構造を取得し, tree.getRootNodeメソッドでルートノードを取得することが出来る. +ノードは, 子供ノードのリストと辞書を保持しており, それぞれ, root.getChildren()とroot.getAttributes()で取得することが出来る. + +\subsubsection{木の編集} +木の編集は, 通常Nodeを書き換えるためNodeのAPIとして提供されることが多いが, JungleではJungleTreeEditorを利用して行う. +JungleTreeEditorには編集するためのいくつかのメソッドが用意されており, NodePathと呼ばれるルートノードからノードまでのパスを指定することでノードが編集される. +NodePathは, ルートノードからスタートし, ノードの子供の場所を次々に指定していくことで編集対象のノードの場所を表す.(図\ref{fig:nodepath}) + +\begin{figure}[!htbp] +\begin{center} +\includegraphics[width=80mm]{./images/nodepath.pdf} +\end{center} +\caption{NodePath} +\label{fig:nodepath} +\end{figure} + +\begin{lstlisting}[frame=lrbt,label=src:treeeditor,caption=木の編集を行うTreeEditor,numbers=left] +/* データベースの取得まで省略 */ +JungleTree tree = jungle.getTreeByName("your tree name here"); + +JungleTreeEditor editor = tree.getEditor(); + +//パスの生成 +DefaultNodePath path = new DefaultNodePath(); +path = path.add(1).add(2).add(3); + +// トランザクションの始まり +Either<Error,JungleTreeEditor> e = editor.addNewChildAt(path,0); +if(e.isA()){ + // エラーが起きた場合のコード +} +editor = e.b(); +e = editor.putAttribute(path,"key",ByteBuffer.wrap("value".getBytes()); +if(e.isA()){ + // エラーが起きた場合のコード +} +editor = e.b(); +editor.success(); +// トランザクションの終わり +\end{lstlisting} + +JungleTreeEditorはtree.getEditor()で取得することが出来る. +JungleTreeEditorはJungleTreeを非破壊的に編集し, Either$<$Error,JungleTreeEditor$>$型を返す. これは, エラーの場合はErrorが格納されており, 正常に編集が成功した場合はJungleTreeEditorを保持する型である. +木構造の編集により返されるJungleTreeEditorは, 編集された木構造を保持しており編集前の木構造を保持するJungleTreeEditorは別のオブジェクトである. +非破壊的に編集を繰り返した後, editor.successにより今までの編集をコミットすることが出来る, このとき他のJungleTreeEditorなどでJungleTreeがすでに更新されていた場合はコミットは失敗する. そのため, 最初からやり直す必要がある. + +\subsubsection{木の編集にNodeEditorを利用する} +木の編集にはNodeEditorを利用することも出来る, NodeEditorにはNodeの編集手順を記述しJungleTreeEditorに渡す. ソース\ref{src:treeeditor}と同等な処理を行うNodeEditorを以下に示す. + +\begin{lstlisting}[frame=lrbt,label=src:nodeeditor,caption=同等の処理を行うNodeEditor,numbers=left] +/* データベースの取得まで省略 */ +JungleTree tree = jungle.getTreeByName("your tree name here"); + +JungleTreeEditor treeEditor = tree.getEditor(); + +NodeEditor nodeEditor = new NodeEditor(){ + public <T extends EditableNode<T>> edit(T node){ + Either<Error,T> e = node.addNewChildAt(0); + if(e.isA()){ + // エラーが起きた場合のコード + } + node = e.b(); + e = node.putAttribute("key",ByteBuffer.wrap("value".getBytes())); + if(e.isA()){ + // エラーが起きた場合のコード + } + return e.b(); + } +}; + +DefaultNodePath path = new DefaultNodePath(); +path = path.add(1).add(2).add(3); + +// トランザクションの始まり +Either<Error,JungleTreeEditor> e = editor.edit(path,nodeEditor); +if(e.isA()){ + // エラーが起きた場合のコード +} +editor.success(); +// トランザクションの終わり +\end{lstlisting} + +\subsubsection{木のトラバース} +木をトラバースするためには, Traverserを利用する. Traverserは木を対象にせずNodeを対象に取るため, 木の任意の部分から走査を始めることが可能である. +Traverserは目的のノードまでに通ったノードをすべて列挙するため, JungleTreeEditorはNodePathとTraverserを用いて編集対象のノードまでの全てのノードを取得している. +以下のコードはNodePathを用いて目的のノードまでをトラバースするコードである. + +\begin{lstlisting}[frame=lrbt,label=src:nodeeditor,caption=NodePathを用いた木のトラバース,numbers=left] +/* データベースの取得まで省略 */ +JungleTree tree = jungle.getTreeByName("your tree name here"); + +DefaultNodePath path = new DefaultNodePath(); +path = path.add(1).add(2).add(3); +DefaultEvaluator evaluator = new DefaultEvaluator(path); + +Node root = tree.getRootNode(); +TraversableNodeWrapper<Node> wrapper = new TraversableNodeWrapper<Node>(root); + +// Traverserの作成 +DefaultTraverser traverser = new DefaultTraverser(); +Traversal result = traverser.traverse(wrapper,evaluator); + +for(Direction d : result){ // パスの分だけDirectionが生成される + int pos = d.getPosition(); + Node node = d.getTraget(); + // etc etc.. +} +\end{lstlisting} + +Evaluator,Directionなどのクラスの説明については後述する. +これまでに, Jungleの基本的な利用方法について述べた. 以降はJungleの更に細かい部分の実装について説明する. + +\section{木構造データベースJungleの実装} +\subsection{開発環境} +\subsubsection{言語} +本システムではサーバーサイドの実装にJavaを用いる. Javaは豊富なライブラリと開発環境が整っているため使いやすい言語である.\\ +また, 外部ライブラリとしてFunctionalJavaを用いる. このライブラリはJavaで関数型スタイルのプログラミングを行うために開発された. 本システムでは, 非破壊的木構造をメインのデータ構造とする, そのため, 多くの非破壊的データ構造を利用できるFunctionalJavaは有効に利用できる. + +\subsection{全体の構造} +全体木構造データベースは木構造を表現するNodeと, Nodeを非破壊的に編集するNodeEditor, Nodeの集合である木構造を非破壊的に編集するTreeEditorから構成される. 以下に, 述べたコンポーネントとその他の構成要素の表を示す. + +\begin{table}[!htbp] +\caption{コンポーネント一覧} +\label{tab:components} +\begin{center} +\begin{tabular}{|c||c|} \hline +名前 & 概要 \\ \hline +Node & 基本的なデータ構造, 読み込み専用の親子関係を表現する \\ \hline +NodeEditor & ノードを編集する \\ \hline +TreeEditor & 複数のノードから構成される木構造を編集する \\ \hline +Traverser & 木構造を走査し目的のNodeを取得する \\ \hline +JungleTreeEditor & TreeEditorに加え, トランザクションを管理する \\ \hline +JungleTree & JungleTreeEditorなど, 木の情報を管理する \\ \hline +Jungle & 木の作成・取得・削除を担当する. \\ \hline +\end{tabular} +\end{center} +\end{table} + +\subsection{型パラメータつきインターフェイスParentの導入} +我々は, Javaで木構造を表すためにParent,Childrenというインターフェイスを作成する. これは非常に複雑であるが, 親子関係を表すのに有用な仕組みだと思われる. 定義を以下に示す. + +\begin{lstlisting}[frame=lrbt,label=src:parent,caption=Parentの定義,numbers=left] +public interface Parent<T> { + public Children<T> getChildren(); +} +\end{lstlisting} + +\begin{lstlisting}[frame=lrbt,label=src:child,caption=Childrenの定義,numbers=left] +public interface Children<T> extends Iterable<T>{ + public int size(); +} +\end{lstlisting} + +これらのインターフェイスを利用するためには, まず, ソース\ref{src:node}のようにして継承したインターフェイスを作成する. +ここで型パラメータTはNodeを継承した型として宣言する. + +\begin{lstlisting}[frame=lrbt,label=src:node,caption=Nodeの定義,numbers=left] +public interface Node<T extends Node<T>> implements Parent<T> { + public Children<T> getChildren(); +} +\end{lstlisting} + +NodeはParentの定義よりT型の子供を保持するインターフェイスとして宣言できる. そしてT型はNode型を継承する型なので, 再帰的な構造を表現することが出来る. +このインターフェイスを実装すると以下のようになる. + +\begin{lstlisting}[frame=lrbt,label=src:nodeimpl,caption=NodeImplの定義,numbers=left] +public class NodeImpl implements Node<NodeImpl> { + public Children<NodeImpl> getChildren(); +} +\end{lstlisting} + +このNodeの実装では, Childrenの型パラメータがNodeImplになる. こうすることで, 実装を知らないクラスに引数として渡しても型パラメータが失われることがないコードを記述できるようになる.\\ +例えば, 我々のシステムでは, 主に非破壊的なデータ構造を扱う. すなわち, 非破壊的オブジェクトを編集して返すメソッドがあるクラスに存在する場合, その返されたオブジェクトは元々のオブジェクトと異なるため, 型の情報が失われてしまうためキャストが必要になる.\\ +しかし, この方法では, キャストは必要なく常に型パラメータは保持される. + +\begin{lstlisting}[frame=lrbt,label=src:parent_example,caption=Parentが有用な例,numbers=left] +class EditorA { + public Node edit(Node obj) { .... } +} +class EditorB { + public <T extends Node<T>> edit(T obj) { .... } +} +class Obj implements Node<Obj> { + public static void main(String args[]){ + Obj o = new Obj(); + EditorA a = new EditorA(); + EditorB b = new EditorB(); + Node n = a.edit(o); // 型が失われてNodeになるキャストが必要 + Obj newObj = b.edit(o); // 型は失われない. + } +} +\end{lstlisting} + +我々の実装で, 親子関係を扱うコンポーネントはすべてこのインターフェイスを継承する. 次に, 他の構成するコンポーネントについて述べる. + +\newpage + +\section{Node} +Nodeは, 木構造を表現するためのコンポーネントである. 木構造は子供と辞書を保持する. (図\ref{fig:node_components}) +我々はNodeのAPIをソース\ref{src:definition_of_node}のように定義した. +基本的に, Nodeは読み込み専用であり, 編集操作を持たない. +\begin{figure}[!htbp] +\begin{center} +\includegraphics[width=80mm]{./images/node_component.pdf} +\end{center} +\caption{Nodeの構成要素} +\label{fig:node_components} +\end{figure} + +\begin{lstlisting}[frame=lrbt,label=src:definition_of_node,caption=Nodeの定義,numbers=left] +public class Node implements Children<Node> + ,AttributesContainer { + public Attribute getAttribute(); + public Children<NodeImpl> getChildren(); +} +\end{lstlisting} + +getAttributesは辞書オブジェクトを取得するメソッドで, getChildrenは子ノードのリストを取得するメソッドである. +Childrenの定義は前述したとおりで, Attributesの定義を以下に示す. + +\begin{lstlisting}[frame=lrbt,label=src:definition_of_children,caption=Nodeの定義,numbers=left] +public interface Attributes { + public ByteBuffer get(String key); +} +\end{lstlisting} + +ここで, ByteBufferはjava.nio.ByteBufferである. ここでは, 辞書に格納するものが文字列に限らないことを考慮しByteBuffer型を採用した. + +\newpage + +\section{NodeEditor} +前章で述べたとおり, 非破壊的木構造は編集対象までのNodeをRootからすべてコピーした後, 編集対象のNodeを書き換える. +よって, Nodeを書き換える仕組みが必要である. NodeEditorはNodeを(木構造ではない)を編集するためのコンポーネントである. +NodeEditorを構成する要素を表\ref{tab:nodeeditor_components}に示す. + +\begin{figure}[!htbp] +\begin{center} +\includegraphics[width=150mm]{./images/nodeeditor_component.pdf} +\end{center} +\caption{NodeEditorのイメージ} +\label{fig:nodeeditor_component} +\end{figure} + +\begin{table}[!htbp] +\caption{NodeEditorを構成する要素} +\label{tab:nodeeditor_components} +\begin{center} +\begin{tabular}{|c||p{25zw}|} \hline +クラス名 & 概要 \\ \hline \hline +EditableNode & 非破壊的に編集できるNode \\ \hline +EditableAttribute & 非破壊的に編集できる辞書, 編集の際に新しいEditableNodeを返す. \\ \hline +EditableChildren & 非破壊的に編集できる子Nodeリスト, 編集の際に新しいEditableNodeを返す. \\ \hline +NodeEditor & Nodeの編集処理を記述するためのシングルメソッドクラス. \\ \hline +\end{tabular} +\end{center} +\end{table} + +\subsubsection{EditableNode} +EditableNodeは, Parentを継承した非破壊的に編集できることを示すNodeである. EditableAttributesとEditableChildrenをここから取得することが出来る. + +\subsubsection{EditableAttributes} +EditableAttributeは, Attributesを拡張し編集操作を加えたインターフェイスである. 辞書への追加, 削除が定義されている. +また, 辞書への追加, 削除の操作が行われると新しくEditableNodeが作成される. この作成されたEditableNodeは辞書を元々保持していたEditableNodeのコピーを編集したものでる. + +\begin{lstlisting}[frame=lrbt,label=src:definition_of_editableattributes,caption=EditableAttributesの定義,numbers=left] +public interface EditableAttributes<T extends EditableNode<T>> + implements Attributes { + public void put(String key,ByteBuffer value); + public void delete(String key); +} +\end{lstlisting} + +\subsubsection{EditableChildren} +EditableChildrenは, Childrenを拡張し編集操作を加えたインターフェイスである. 子リストへのNodeの新規追加, 削除を行うことが出来る. +EditableAttributes同様に, リストを編集すると新しくコピーされたオブジェクトを作成し, それを編集して返却する. + +\begin{lstlisting}[frame=lrbt,label=src:definition_of_editablechildren,caption=EditableChildrenの定義,numbers=left] +public interface EditableChildren<T extends EditableNode<T>> + implements Children<T> { + public Either<Error,T> addNewChildAt(int pos); + public Either<Error,T> deleteChildAt(int pos); +} +\end{lstlisting} + +\subsubsection{NodeEditor} +NodeEditorは, Nodeの編集を手順を記述するためのインターフェイスである. メソッドeditを持ち引数としてEditableNodeを取る, edit内部に編集手順を記述し, 戻り値として編集されたEditableNodeを返す.\\ +このインターフェイスは, ユーザー側がNodeを編集するための手順をクラス化し, 木構造を編集するコンポーネント(後述)に渡すことで, 柔軟な編集を実現することが出来る. + +\begin{lstlisting}[frame=lrbt,label=src:definition_of_nodeeditor,caption=NodeEditorの定義,numbers=left] +public interface NodeEditor { + public <T extends EditableNode<T>> Either<Error,T> edit(T node); +} +\end{lstlisting} + +例えば, あるNodeの辞書に名前と生年月日, 研究室を追加するNodeEditorは以下のように記述する. + +\begin{lstlisting}[frame=lrbt,label=src:nodeditor_sample,caption=NodeEditorのサンプル実装,numbers=left] +public class AddProfile implements NodeEditor { + public <T extends EditableNode<T>> Either<Error,T> edit(T node){ + node = node.getAttributes().put(key_name,name).b(); + node = node.getAttributes().put(key_birth,birth).b(); + node = node.getAttributes().put(key_lab,laboname).b(); + return node; + } +} +\end{lstlisting} + +\newpage + +\subsection{TreeEditor} +TreeEditorは木構造を非破壊的に編集するためのコンポーネントでありNodeEditorを利用して実装される. +非破壊的木構造の編集方法通り, TreeEditorは編集対象のNodeまでをコピーする. コピーした編集対象のNodeをNodeEditorを使って編集する. +NodeEditorはNodeを編集するためのコンポーネントだが, TreeEditorは木を構成するためのコンポーネントであるため木を構成するためのNodeを持つ. +TreeEditorを構成する要素を表\ref{tab:treeeditor_components}に示す. + +\begin{table}[!htbp] +\caption{TreeEditorの構成要素} +\label{tab:treeeditor_components} +\begin{center} +\begin{tabular}{|c||c|} \hline +クラス名 & 概要 \\ \hline \hline +TreeNode & 木を構成するノード \\ \hline +TreeNodeChildren & 子供ノードのリスト \\ \hline +TreeNodeAttributes & ノードが保持する辞書 \\ \hline +TreeEditor & 木を編集するためのメソッドを持つエディタ \\ \hline +\end{tabular} +\end{center} +\end{table} + +\subsubsection{TreeNode} +TreeNodeは, EditableNodeとほぼ同じであるが木を構成するために適したメソッドを保持するTreeNodeAttributeとTreeNodeChildrenを保持する. + +\subsubsection{TreeAttribute} +TreeNodeAttributeは, Attributesを拡張し編集操作を加えたインターフェイスである. EditableAttribute同様, 辞書への追加, 削除が定義されている. +また, 辞書への追加, 削除の操作が行われると新しくTreeNodeが作成される. + +\subsubsection{TreeNodeChildren} +TreeNodeChildrenは, Childrenを拡張し編集操作を加えたインターフェイスである. 子リストへのNodeの新規追加, 削除を行うことが出来る. +EditableChildrenは, 子供Nodeとして既存のNodeを追加することが出来ないが, TreeNodeChildrenはそれが可能であるため, 効率よく木を構成することができる. +また, EditableChildren同様にリストを編集すると新しくコピーされたオブジェクトを作成し, それを編集して返却する. + +\begin{lstlisting}[frame=lrbt,label=src:definition_of_treenodechildren,caption=TreeNodeChildrenの定義,numbers=left] +public interface TreeNodeChildren<T extends TreeNode<T>> + implements Children<T> { + public Either<Error,T> addNewChildAt(int pos); + public Either<Error,T> deleteChildAt(int pos); + public Either<Error,T> addNewChildAt(int pos,T newChild); +} +\end{lstlisting} + +\subsubsection{TreeEditor} +TreeEditorは, TreeNodeで構成される木を編集するための操作が定義されているインターフェイスである. +NodePathと呼ばれるルートNodeから編集対象のNodeまでのパスとNodeEditorを引数として受け取り, 非破壊的に編集する. +TreeEditorの定義を以下に示す. + +\begin{lstlisting}[frame=lrbt,label=src:definition_of_treenodechildren,caption=TreeNodeChildrenの定義,numbers=left] +public interface TreeEditor { + public <T extends TreeNode<T>> Either<Error,T> edit(T root,NodePath,NodeEditor editor); +} +\end{lstlisting} + +TreeEditorは, 木を対象にするわけではなくNodeを引数に取るため, 木を構成する任意のTreeNodeから編集することも可能である. + +\subsection{Traverser} +\subsection{Jungle} + + \section{木構造の検索} \subsection{Traverser} \section{木構造読み込み}
--- a/introduciton.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/introduciton.tex Tue Feb 12 17:50:58 2013 +0900 @@ -12,8 +12,13 @@ またウェブサービスは,サーバーサイドにてスケーラビリティを確保することが多く,クライアント側は有効活用されないことが多い. しかし,クライアントはウェブサービスの需要に比例して増加するため,クライアントを有効活用したスケーラビリティ確保も有効である.\\ 本研究では,マルチコア上のスケーラビリティ確保のために非破壊的木構造を利用し,クライアントを活用するため分散版管理システムを参考にしたスケーラブルな分散コンテンツマネージメントシステムの設計と開発を行う. +また, 簡易掲示板システムを開発し, バックエンドとして本研究で開発した木構造データベースJungleとCassandraを用いた. 掲示板と本学科の並列計算環境を用いてスケーラビリティ検証を行った. + +\newpage \subsection{本論文の構成} 本論文では, 初めにどのような方法でスケーラビリティを検証するか確認するために, 学科のPCクラスタを利用した分散データベースCassandraの検証と得られた知見について述べる.\\ 第3章では, 非破壊的木構造と分散リポジトリを参考にしたスケーラビリティ確保の方法について考察し分散コンテンツマネージメントシステムの設計について述べる. \\ -第4章では, 第3章で述べた設計に基づいたJavaでの設計と実装について述べる. +第4章では, 第3章ではスケーラブルな分散コンテンツマネージメントシステムを開発するために開発した木構造データベースJungleのりよう方法とその詳細な設計と実装について述べる.\\ +第5章では, 第4章で実装した木構造データベースについて検証を行うため, 簡易掲示板システムを実装する. この簡易掲示板システムはバックエンドとしてJungleとCassandraを切り替えて利用できる仕組みが取られている. 開発した掲示板システムを利用して本学科の並列計算環境を用いて検証を行う.\\ +第6章では, 本研究のまとめとこれからの課題について検討する.
--- a/master_paper.aux Thu Jan 31 20:21:24 2013 +0900 +++ b/master_paper.aux Tue Feb 12 17:50:58 2013 +0900 @@ -4,121 +4,234 @@ \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {1.1}序論}{1}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.1.1}研究背景と目的}{1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.2}本論文の構成}{1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.2}本論文の構成}{2}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第2章}分散データベースのスケーラビリティ検証}{3}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {2.1}はじめに}{3}} +\@writefile{toc}{\contentsline {section}{\numberline {2.2}スケーラビリティとは}{3}} \citation{dynamo} \citation{bigtable} -\@writefile{toc}{\contentsline {chapter}{\numberline {第2章}分散データベースのスケーラビリティ検証}{2}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {2.1}はじめに}{2}} -\@writefile{toc}{\contentsline {section}{\numberline {2.2}スケーラビリティとは}{2}} -\@writefile{toc}{\contentsline {section}{\numberline {2.3}分散データベース Cassandra}{2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}Google BigTable}{2}} \citation{seda:1} \citation{seda:2} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.2}Amazon Dynamo}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.3}SEDA}{3}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces SEDA}}{3}} -\newlabel{fig:SEDA}{{2.1}{3}} -\@writefile{toc}{\contentsline {section}{\numberline {2.4}分散データベースCassandraのスケーラビリティ検証}{3}} -\@writefile{toc}{\contentsline {subsubsection}{検証方法}{3}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces PCクラスタを用いたCassandraの検証環境}}{4}} -\newlabel{fig:benchmark}{{2.2}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.1}検証環境}{4}} -\@writefile{lot}{\contentsline {table}{\numberline {2.1}{\ignorespaces スケーラビリティ検証環境のマシン性能一覧}}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.2}検証結果}{4}} -\@writefile{toc}{\contentsline {subsubsection}{2Coreを搭載したコア数の少ないサーバーを用いた検証}{4}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces Readの結果}}{5}} -\newlabel{fig:one}{{2.3}{5}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.4}{\ignorespaces Writeの結果}}{5}} -\newlabel{fig:two}{{2.4}{5}} -\@writefile{toc}{\contentsline {subsubsection}{4Core8Threadsを搭載したコア数の多いサーバーを用いた検証}{5}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.5}{\ignorespaces Readの結果}}{5}} -\newlabel{fig:one}{{2.5}{5}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.6}{\ignorespaces Writeの結果}}{5}} -\newlabel{fig:two}{{2.6}{5}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.3}まとめ}{6}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第3章}分散コンテンツマネージメントシステムの設計}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {2.3}分散データベース Cassandra}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}SEDA}{4}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces SEDA}}{4}} +\newlabel{fig:SEDA}{{2.1}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {2.4}分散データベースCassandraのスケーラビリティ検証}{5}} +\@writefile{toc}{\contentsline {subsubsection}{検証方法}{5}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces PCクラスタを用いたCassandraの検証環境}}{5}} +\newlabel{fig:benchmark}{{2.2}{5}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.1}検証環境}{5}} +\@writefile{lot}{\contentsline {table}{\numberline {2.1}{\ignorespaces スケーラビリティ検証環境のマシン性能一覧}}{5}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.2}検証結果}{6}} +\@writefile{toc}{\contentsline {subsubsection}{2Coreを搭載したコア数の少ないサーバーを用いた検証}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces Readの結果}}{6}} +\newlabel{fig:one}{{2.3}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.4}{\ignorespaces Writeの結果}}{6}} +\newlabel{fig:two}{{2.4}{6}} +\@writefile{toc}{\contentsline {subsubsection}{4Core8Threadsを搭載したコア数の多いサーバーを用いた検証}{7}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.5}{\ignorespaces Readの結果}}{7}} +\newlabel{fig:one}{{2.5}{7}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.6}{\ignorespaces Writeの結果}}{7}} +\newlabel{fig:two}{{2.6}{7}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.3}まとめ}{7}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第3章}分散コンテンツマネージメントシステムの設計}{8}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {3.1}はじめに}{8}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}スケーラブルにするためには}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces データを他の全ノードに通知する}}{9}} +\newlabel{fig:consistency_level_write_heavy}{{3.1}{9}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces 他の全ノードに最新のデータを確認する}}{9}} +\newlabel{fig:consistency_level_read_heavy}{{3.2}{9}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces 過半数のノードに通知, 過半数のノードの答えを採用する}}{9}} +\newlabel{fig:consistency_level_quoram}{{3.3}{9}} +\@writefile{toc}{\contentsline {section}{\numberline {3.2}木構造を用いたデータ表現}{10}} +\@writefile{toc}{\contentsline {section}{\numberline {3.3}提案手法}{11}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}非破壊的木構造}{11}} +\@writefile{toc}{\contentsline {subsubsection}{破壊的木構造}{11}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces 木構造の破壊的編集}}{11}} +\newlabel{fig:destructive_tree_modification}{{3.4}{11}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces 競合状態に陥る木構造の破壊的編集}}{12}} +\newlabel{fig:destructive_tree_modification_in_lace}{{3.5}{12}} +\@writefile{toc}{\contentsline {subsubsection}{非破壊的木構造}{12}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.6}{\ignorespaces 木構造の非破壊的編集}}{12}} +\newlabel{fig:nondestructive_tree_modification}{{3.6}{12}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.7}{\ignorespaces ステップ1:変更したいノードまでのパスを求める.}}{13}} +\newlabel{fig:nondestructive_tree_modification_step1}{{3.7}{13}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.8}{\ignorespaces ステップ2:変更したいノードをコピーし, コピーしたノードの内容を変更する.}}{13}} +\newlabel{fig:nondestructive_tree_modification_step2}{{3.8}{13}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.9}{\ignorespaces ステップ3:求めたパス上に存在するノードをルートノードまでコピーする.}}{13}} +\newlabel{fig:nondestructive_tree_modification_step3}{{3.9}{13}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.10}{\ignorespaces ステップ4:影響のないノードは共有する.}}{13}} +\newlabel{fig:nondestructive_tree_modification_step4}{{3.10}{13}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.11}{\ignorespaces 並列に読み書きが可能な非破壊的木構造}}{14}} +\newlabel{fig:nondestructive_tree_modification_in_lace}{{3.11}{14}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}分散バージョン管理システム}{14}} +\@writefile{toc}{\contentsline {subsubsection}{Push/Pull方式}{14}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.12}{\ignorespaces 分散バージョン管理システムと集中型バージョン管理システム}}{15}} +\newlabel{fig:distributed_and_normal_repository}{{3.12}{15}} +\@writefile{toc}{\contentsline {subsubsection}{マージ}{15}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.13}{\ignorespaces 変更が衝突しない場合}}{16}} +\newlabel{fig:merge_sample_success}{{3.13}{16}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.14}{\ignorespaces 変更が衝突したが, 自然に解決できる場合}}{16}} +\newlabel{fig:merge_sample_success}{{3.14}{16}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.15}{\ignorespaces 変更が衝突したが, 自然に解決できない場合}}{16}} +\newlabel{fig:merge_sample_fail}{{3.15}{16}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.3}グラフデータベース}{17}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.16}{\ignorespaces プロパティグラフの例}}{17}} +\newlabel{fig:property_graph}{{3.16}{17}} +\@writefile{toc}{\contentsline {subsubsection}{トラバース}{17}} +\newlabel{src:property_graph_traverse_tinkerpop}{{3.1}{17}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}トラバースの例}{17}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.17}{\ignorespaces プロパティグラフのトラバース例}}{18}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.4}ブラウザサイドの実装}{18}} +\@writefile{lot}{\contentsline {table}{\numberline {3.1}{\ignorespaces HTML5で実装される新機能}}{18}} +\newlabel{tab:HTML5_functions}{{3.1}{18}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}全体の設計}{19}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.18}{\ignorespaces システム全体の概要図}}{19}} +\newlabel{fig:basic_architecture}{{3.18}{19}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.4.1}サーバーサイド}{19}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.4.2}クライアントサイド}{20}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}分散コンテンツマネージメントシステムの実装}{21}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}はじめに}{7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}スケーラブルにするためには}{7}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces データを他の全ノードに通知する}}{8}} -\newlabel{fig:consistency_level_write_heavy}{{3.1}{8}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces 他の全ノードに最新のデータを確認する}}{8}} -\newlabel{fig:consistency_level_read_heavy}{{3.2}{8}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces 過半数のノードに通知, 過半数のノードの答えを採用する}}{8}} -\newlabel{fig:consistency_level_quoram}{{3.3}{8}} -\@writefile{toc}{\contentsline {section}{\numberline {3.2}木構造を用いたデータ表現}{9}} -\@writefile{toc}{\contentsline {section}{\numberline {3.3}提案手法}{10}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}非破壊的木構造}{10}} -\@writefile{toc}{\contentsline {subsubsection}{破壊的木構造}{10}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces 木構造の破壊的編集}}{10}} -\newlabel{fig:destructive_tree_modification}{{3.4}{10}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces 競合状態に陥る木構造の破壊的編集}}{11}} -\newlabel{fig:destructive_tree_modification_in_lace}{{3.5}{11}} -\@writefile{toc}{\contentsline {subsubsection}{非破壊的木構造}{11}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.6}{\ignorespaces 木構造の非破壊的編集}}{11}} -\newlabel{fig:nondestructive_tree_modification}{{3.6}{11}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.7}{\ignorespaces ステップ1:変更したいノードまでのパスを求める.}}{12}} -\newlabel{fig:nondestructive_tree_modification_step1}{{3.7}{12}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.8}{\ignorespaces ステップ2:変更したいノードをコピーし, コピーしたノードの内容を変更する.}}{12}} -\newlabel{fig:nondestructive_tree_modification_step2}{{3.8}{12}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.9}{\ignorespaces ステップ3:求めたパス上に存在するノードをルートノードまでコピーする.}}{12}} -\newlabel{fig:nondestructive_tree_modification_step3}{{3.9}{12}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.10}{\ignorespaces ステップ4:影響のないノードは共有する.}}{12}} -\newlabel{fig:nondestructive_tree_modification_step4}{{3.10}{12}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.11}{\ignorespaces 並列に読み書きが可能な非破壊的木構造}}{13}} -\newlabel{fig:nondestructive_tree_modification_in_lace}{{3.11}{13}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}分散バージョン管理システム}{13}} -\@writefile{toc}{\contentsline {subsubsection}{Push/Pull方式}{13}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.12}{\ignorespaces 分散バージョン管理システムと集中型バージョン管理システム}}{14}} -\newlabel{fig:distributed_and_normal_repository}{{3.12}{14}} -\@writefile{toc}{\contentsline {subsubsection}{マージ}{14}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.13}{\ignorespaces 変更が衝突しない場合}}{15}} -\newlabel{fig:merge_sample_success}{{3.13}{15}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.14}{\ignorespaces 変更が衝突したが, 自然に解決できる場合}}{15}} -\newlabel{fig:merge_sample_success}{{3.14}{15}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.15}{\ignorespaces 変更が衝突したが, 自然に解決できない場合}}{15}} -\newlabel{fig:merge_sample_fail}{{3.15}{15}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.3}グラフデータベース}{16}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.16}{\ignorespaces プロパティグラフの例}}{16}} -\newlabel{fig:property_graph}{{3.16}{16}} -\@writefile{toc}{\contentsline {subsubsection}{トラバース}{16}} -\newlabel{src:property_graph_traverse_tinkerpop}{{3.1}{16}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}トラバースの例}{16}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.17}{\ignorespaces プロパティグラフのトラバース例}}{17}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.4}ブラウザサイドの実装}{17}} -\@writefile{lot}{\contentsline {table}{\numberline {3.1}{\ignorespaces HTML5で実装される新機能}}{17}} -\newlabel{tab:HTML5_functions}{{3.1}{17}} -\@writefile{toc}{\contentsline {section}{\numberline {3.4}全体の設計}{18}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.18}{\ignorespaces システム全体の概要図}}{18}} -\newlabel{fig:basic_architecture}{{3.18}{18}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}分散コンテンツマネージメントシステムの実装}{19}} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}はじめに}{21}} +\@writefile{toc}{\contentsline {section}{\numberline {4.2}木構造データベースJungle}{21}} +\@writefile{toc}{\contentsline {subsubsection}{木の作成}{21}} +\newlabel{src:create_jungle}{{4.1}{21}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.1}データベースオブジェクトと木の作成}{21}} +\@writefile{toc}{\contentsline {subsubsection}{木と木を構成するノード}{22}} +\newlabel{src:create_jungle}{{4.2}{22}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.2}木とノードの取得}{22}} +\@writefile{toc}{\contentsline {subsubsection}{木の編集}{22}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces NodePath}}{22}} +\newlabel{fig:nodepath}{{4.1}{22}} +\newlabel{src:treeeditor}{{4.3}{23}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.3}木の編集を行うTreeEditor}{23}} +\@writefile{toc}{\contentsline {subsubsection}{木の編集にNodeEditorを利用する}{23}} +\newlabel{src:nodeeditor}{{4.4}{23}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.4}同等の処理を行うNodeEditor}{23}} +\@writefile{toc}{\contentsline {subsubsection}{木のトラバース}{24}} +\newlabel{src:nodeeditor}{{4.5}{24}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.5}NodePathを用いた木のトラバース}{24}} +\@writefile{toc}{\contentsline {section}{\numberline {4.3}木構造データベースJungleの実装}{25}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.1}開発環境}{25}} +\@writefile{toc}{\contentsline {subsubsection}{言語}{25}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.2}全体の構造}{25}} +\@writefile{lot}{\contentsline {table}{\numberline {4.1}{\ignorespaces コンポーネント一覧}}{25}} +\newlabel{tab:components}{{4.1}{25}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.3}型パラメータつきインターフェイスParentの導入}{25}} +\newlabel{src:parent}{{4.6}{25}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.6}Parentの定義}{25}} +\newlabel{src:child}{{4.7}{26}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.7}Childrenの定義}{26}} +\newlabel{src:node}{{4.8}{26}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.8}Nodeの定義}{26}} +\newlabel{src:nodeimpl}{{4.9}{26}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.9}NodeImplの定義}{26}} +\newlabel{src:parent_example}{{4.10}{26}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.10}Parentが有用な例}{26}} +\@writefile{toc}{\contentsline {section}{\numberline {4.4}Node}{27}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.2}{\ignorespaces Nodeの構成要素}}{27}} +\newlabel{fig:node_components}{{4.2}{27}} +\newlabel{src:definition_of_node}{{4.11}{27}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.11}Nodeの定義}{27}} +\newlabel{src:definition_of_children}{{4.12}{27}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.12}Nodeの定義}{27}} +\@writefile{toc}{\contentsline {section}{\numberline {4.5}NodeEditor}{28}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.3}{\ignorespaces NodeEditorのイメージ}}{28}} +\newlabel{fig:nodeeditor_component}{{4.3}{28}} +\@writefile{lot}{\contentsline {table}{\numberline {4.2}{\ignorespaces NodeEditorを構成する要素}}{28}} +\newlabel{tab:nodeeditor_components}{{4.2}{28}} +\@writefile{toc}{\contentsline {subsubsection}{EditableNode}{28}} +\@writefile{toc}{\contentsline {subsubsection}{EditableAttributes}{28}} +\newlabel{src:definition_of_editableattributes}{{4.13}{29}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.13}EditableAttributesの定義}{29}} +\@writefile{toc}{\contentsline {subsubsection}{EditableChildren}{29}} +\newlabel{src:definition_of_editablechildren}{{4.14}{29}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.14}EditableChildrenの定義}{29}} +\@writefile{toc}{\contentsline {subsubsection}{NodeEditor}{29}} +\newlabel{src:definition_of_nodeeditor}{{4.15}{29}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.15}NodeEditorの定義}{29}} +\newlabel{src:nodeditor_sample}{{4.16}{29}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.16}NodeEditorのサンプル実装}{29}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.1}TreeEditor}{30}} +\@writefile{lot}{\contentsline {table}{\numberline {4.3}{\ignorespaces TreeEditorの構成要素}}{30}} +\newlabel{tab:treeeditor_components}{{4.3}{30}} +\@writefile{toc}{\contentsline {subsubsection}{TreeNode}{30}} +\@writefile{toc}{\contentsline {subsubsection}{TreeAttribute}{30}} +\@writefile{toc}{\contentsline {subsubsection}{TreeNodeChildren}{30}} +\newlabel{src:definition_of_treenodechildren}{{4.17}{30}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.17}TreeNodeChildrenの定義}{30}} +\@writefile{toc}{\contentsline {subsubsection}{TreeEditor}{31}} +\newlabel{src:definition_of_treenodechildren}{{4.18}{31}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.18}TreeNodeChildrenの定義}{31}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.2}Traverser}{31}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.3}Jungle}{31}} +\@writefile{toc}{\contentsline {section}{\numberline {4.6}木構造の検索}{31}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.1}Traverser}{31}} +\@writefile{toc}{\contentsline {section}{\numberline {4.7}木構造読み込み}{31}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.1}Journal}{31}} +\@writefile{toc}{\contentsline {section}{\numberline {4.8}木構造への書き込み}{31}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.1}TreeEditor}{31}} +\@writefile{toc}{\contentsline {section}{\numberline {4.9}木構造のマージ}{31}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.9.1}Merger}{31}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}木構造データベースJungleを用いたCMSの検証}{32}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}はじめに}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.2}開発環境}{19}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}言語}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.3}全体の構造}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.4}木構造の検索}{19}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.1}Traverser}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.5}木構造読み込み}{19}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.1}Journal}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.6}木構造への書き込み}{19}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.1}TreeEditor}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.7}木構造のマージ}{19}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.1}Merger}{19}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}結論}{20}} +\@writefile{toc}{\contentsline {section}{\numberline {5.1}はじめに}{32}} +\@writefile{toc}{\contentsline {section}{\numberline {5.2}実験方法}{32}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.1}{\ignorespaces 簡易掲示板システムを用いたJungleの検証の概要}}{32}} +\@writefile{toc}{\contentsline {subsubsection}{Torque ResourceManager}{33}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces Torque ResourceManagerの概要}}{33}} +\newlabel{fig:torque}{{5.2}{33}} +\@writefile{toc}{\contentsline {subsubsection}{簡易掲示板システム}{33}} +\@writefile{lot}{\contentsline {table}{\numberline {5.1}{\ignorespaces 簡易掲示板システムで利用したJettyとCassandraのバージョン}}{34}} +\newlabel{tab:bulletinboard_components}{{5.1}{34}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.1}実験環境}{34}} +\@writefile{toc}{\contentsline {subsubsection}{サーバー}{34}} +\@writefile{lot}{\contentsline {table}{\numberline {5.2}{\ignorespaces コア数の多いサーバーの仕様}}{34}} +\newlabel{tab:server_spec_1}{{5.2}{34}} +\@writefile{lot}{\contentsline {table}{\numberline {5.3}{\ignorespaces コア数の少ないサーバーの仕様}}{34}} +\newlabel{tab:server_spec_2}{{5.3}{34}} +\@writefile{toc}{\contentsline {subsubsection}{サーバーのnf\_conntrack}{35}} +\newlabel{src:syslog_nfconntrack}{{5.1}{35}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.1}syslogに大量のnf\_conntrack}{35}} +\newlabel{src:nf_conntrack_max}{{5.2}{35}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.2}nf\_conntrackのテーブルサイズを大きくする}{35}} +\@writefile{toc}{\contentsline {subsubsection}{クラスタ}{35}} +\@writefile{lot}{\contentsline {table}{\numberline {5.4}{\ignorespaces 検証に利用するサーバーの仕様}}{35}} +\newlabel{tab:server_spec}{{5.4}{35}} +\@writefile{toc}{\contentsline {section}{\numberline {5.3}実験}{36}} +\newlabel{src:benchmark_script}{{5.3}{36}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.3}サーバーにアクセスするためのスクリプト}{36}} +\newlabel{src:torque_script}{{5.4}{37}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.4}割り当てられたクラスタにタスクを送るスクリプト}{37}} +\newlabel{src:qsub_command}{{5.5}{37}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.5}Torqueにタスクを実行させるコマンド}{37}} +\newlabel{src:auto_qsub_script}{{5.6}{37}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.6}タスクの実行を監視して自動的に次のタスクを投入するスクリプト}{37}} +\@writefile{toc}{\contentsline {section}{\numberline {5.4}実験結果}{38}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.1}コア数が多いサーバーを利用した読み込みの検証}{38}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces コア数が多いサーバーを利用した読み込み性能の検証}}{38}} +\newlabel{fig:benchmark_read_bldsv10}{{5.3}{38}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}コア数が多いサーバーを利用した書き込みの検証}{38}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.3}コア数が少ないサーバーを利用した読み込みの検証}{38}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.4}コア数が少ないサーバーを利用した書き込みの検証}{38}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces コア数が多いサーバーを利用した書き込み性能の検証}}{39}} +\newlabel{fig:benchmark_read_bldsv10}{{5.4}{39}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}結論}{40}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chapter:conclusion}{{5}{20}} -\@writefile{toc}{\contentsline {section}{\numberline {5.1}まとめ}{20}} -\@writefile{toc}{\contentsline {section}{\numberline {5.2}今後の課題}{20}} +\newlabel{chapter:conclusion}{{6}{40}} +\@writefile{toc}{\contentsline {section}{\numberline {6.1}まとめ}{40}} +\@writefile{toc}{\contentsline {section}{\numberline {6.2}今後の課題}{40}} \citation{*} \bibstyle{junsrt} \bibdata{master_paper} -\@writefile{toc}{\contentsline {chapter}{謝辞}{21}} +\@writefile{toc}{\contentsline {chapter}{謝辞}{41}} \bibcite{dynamo}{1} \bibcite{bigtable}{2} \bibcite{seda:1}{3} @@ -126,5 +239,5 @@ \bibcite{shoshi:2010a}{5} \bibcite{shoshi:2011a}{6} \bibcite{shoshi:2011b}{7} -\@writefile{toc}{\contentsline {chapter}{参考文献}{22}} -\@writefile{toc}{\contentsline {chapter}{発表文献}{23}} +\@writefile{toc}{\contentsline {chapter}{参考文献}{42}} +\@writefile{toc}{\contentsline {chapter}{発表文献}{43}}
--- a/master_paper.lof Thu Jan 31 20:21:24 2013 +0900 +++ b/master_paper.lof Tue Feb 12 17:50:58 2013 +0900 @@ -1,29 +1,37 @@ \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {figure}{\numberline {2.1}{\ignorespaces SEDA}}{3} -\contentsline {figure}{\numberline {2.2}{\ignorespaces PCクラスタを用いたCassandraの検証環境}}{4} -\contentsline {figure}{\numberline {2.3}{\ignorespaces Readの結果}}{5} -\contentsline {figure}{\numberline {2.4}{\ignorespaces Writeの結果}}{5} -\contentsline {figure}{\numberline {2.5}{\ignorespaces Readの結果}}{5} -\contentsline {figure}{\numberline {2.6}{\ignorespaces Writeの結果}}{5} +\contentsline {figure}{\numberline {2.1}{\ignorespaces SEDA}}{4} +\contentsline {figure}{\numberline {2.2}{\ignorespaces PCクラスタを用いたCassandraの検証環境}}{5} +\contentsline {figure}{\numberline {2.3}{\ignorespaces Readの結果}}{6} +\contentsline {figure}{\numberline {2.4}{\ignorespaces Writeの結果}}{6} +\contentsline {figure}{\numberline {2.5}{\ignorespaces Readの結果}}{7} +\contentsline {figure}{\numberline {2.6}{\ignorespaces Writeの結果}}{7} \addvspace {10\p@ } -\contentsline {figure}{\numberline {3.1}{\ignorespaces データを他の全ノードに通知する}}{8} -\contentsline {figure}{\numberline {3.2}{\ignorespaces 他の全ノードに最新のデータを確認する}}{8} -\contentsline {figure}{\numberline {3.3}{\ignorespaces 過半数のノードに通知, 過半数のノードの答えを採用する}}{8} -\contentsline {figure}{\numberline {3.4}{\ignorespaces 木構造の破壊的編集}}{10} -\contentsline {figure}{\numberline {3.5}{\ignorespaces 競合状態に陥る木構造の破壊的編集}}{11} -\contentsline {figure}{\numberline {3.6}{\ignorespaces 木構造の非破壊的編集}}{11} -\contentsline {figure}{\numberline {3.7}{\ignorespaces ステップ1:変更したいノードまでのパスを求める.}}{12} -\contentsline {figure}{\numberline {3.8}{\ignorespaces ステップ2:変更したいノードをコピーし, コピーしたノードの内容を変更する.}}{12} -\contentsline {figure}{\numberline {3.9}{\ignorespaces ステップ3:求めたパス上に存在するノードをルートノードまでコピーする.}}{12} -\contentsline {figure}{\numberline {3.10}{\ignorespaces ステップ4:影響のないノードは共有する.}}{12} -\contentsline {figure}{\numberline {3.11}{\ignorespaces 並列に読み書きが可能な非破壊的木構造}}{13} -\contentsline {figure}{\numberline {3.12}{\ignorespaces 分散バージョン管理システムと集中型バージョン管理システム}}{14} -\contentsline {figure}{\numberline {3.13}{\ignorespaces 変更が衝突しない場合}}{15} -\contentsline {figure}{\numberline {3.14}{\ignorespaces 変更が衝突したが, 自然に解決できる場合}}{15} -\contentsline {figure}{\numberline {3.15}{\ignorespaces 変更が衝突したが, 自然に解決できない場合}}{15} -\contentsline {figure}{\numberline {3.16}{\ignorespaces プロパティグラフの例}}{16} -\contentsline {figure}{\numberline {3.17}{\ignorespaces プロパティグラフのトラバース例}}{17} -\contentsline {figure}{\numberline {3.18}{\ignorespaces システム全体の概要図}}{18} +\contentsline {figure}{\numberline {3.1}{\ignorespaces データを他の全ノードに通知する}}{9} +\contentsline {figure}{\numberline {3.2}{\ignorespaces 他の全ノードに最新のデータを確認する}}{9} +\contentsline {figure}{\numberline {3.3}{\ignorespaces 過半数のノードに通知, 過半数のノードの答えを採用する}}{9} +\contentsline {figure}{\numberline {3.4}{\ignorespaces 木構造の破壊的編集}}{11} +\contentsline {figure}{\numberline {3.5}{\ignorespaces 競合状態に陥る木構造の破壊的編集}}{12} +\contentsline {figure}{\numberline {3.6}{\ignorespaces 木構造の非破壊的編集}}{12} +\contentsline {figure}{\numberline {3.7}{\ignorespaces ステップ1:変更したいノードまでのパスを求める.}}{13} +\contentsline {figure}{\numberline {3.8}{\ignorespaces ステップ2:変更したいノードをコピーし, コピーしたノードの内容を変更する.}}{13} +\contentsline {figure}{\numberline {3.9}{\ignorespaces ステップ3:求めたパス上に存在するノードをルートノードまでコピーする.}}{13} +\contentsline {figure}{\numberline {3.10}{\ignorespaces ステップ4:影響のないノードは共有する.}}{13} +\contentsline {figure}{\numberline {3.11}{\ignorespaces 並列に読み書きが可能な非破壊的木構造}}{14} +\contentsline {figure}{\numberline {3.12}{\ignorespaces 分散バージョン管理システムと集中型バージョン管理システム}}{15} +\contentsline {figure}{\numberline {3.13}{\ignorespaces 変更が衝突しない場合}}{16} +\contentsline {figure}{\numberline {3.14}{\ignorespaces 変更が衝突したが, 自然に解決できる場合}}{16} +\contentsline {figure}{\numberline {3.15}{\ignorespaces 変更が衝突したが, 自然に解決できない場合}}{16} +\contentsline {figure}{\numberline {3.16}{\ignorespaces プロパティグラフの例}}{17} +\contentsline {figure}{\numberline {3.17}{\ignorespaces プロパティグラフのトラバース例}}{18} +\contentsline {figure}{\numberline {3.18}{\ignorespaces システム全体の概要図}}{19} \addvspace {10\p@ } +\contentsline {figure}{\numberline {4.1}{\ignorespaces NodePath}}{22} +\contentsline {figure}{\numberline {4.2}{\ignorespaces Nodeの構成要素}}{27} +\contentsline {figure}{\numberline {4.3}{\ignorespaces NodeEditorのイメージ}}{28} \addvspace {10\p@ } +\contentsline {figure}{\numberline {5.1}{\ignorespaces 簡易掲示板システムを用いたJungleの検証の概要}}{32} +\contentsline {figure}{\numberline {5.2}{\ignorespaces Torque ResourceManagerの概要}}{33} +\contentsline {figure}{\numberline {5.3}{\ignorespaces コア数が多いサーバーを利用した読み込み性能の検証}}{38} +\contentsline {figure}{\numberline {5.4}{\ignorespaces コア数が多いサーバーを利用した書き込み性能の検証}}{39} +\addvspace {10\p@ }
--- a/master_paper.log Thu Jan 31 20:21:24 2013 +0900 +++ b/master_paper.log Tue Feb 12 17:50:58 2013 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.1415926-p3.3-110825-2.4 (utf8.euc) (TeX Live 2012) (format=platex 2013.1.15) 28 JAN 2013 20:23 +This is e-pTeX, Version 3.1415926-p3.3-110825-2.4 (utf8.euc) (TeX Live 2012) (format=platex 2013.1.15) 12 FEB 2013 17:47 entering extended mode \write18 enabled. %&-line parsing enabled. @@ -127,6 +127,9 @@ \CommentStream=\write3 Excluding comment 'comment') (./dummy.tex) +(/usr/local/texlive/2012/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2004/09/05 1.3 listings language file +) (/usr/local/texlive/2012/texmf-dist/tex/latex/base/makeidx.sty Package: makeidx 2000/03/29 v1.0m Standard LaTeX package ) @@ -193,30 +196,42 @@ LaTeX Warning: Label `fig:merge_sample_success' multiply defined. + +LaTeX Warning: Label `src:create_jungle' multiply defined. + + +LaTeX Warning: Label `src:nodeeditor' multiply defined. + + +LaTeX Warning: Label `src:definition_of_treenodechildren' multiply defined. + + +LaTeX Warning: Label `fig:benchmark_read_bldsv10' multiply defined. + ) \openout1 = `master_paper.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 39. -LaTeX Font Info: ... okay on input line 39. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 39. -LaTeX Font Info: ... okay on input line 39. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 39. -LaTeX Font Info: ... okay on input line 39. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 39. -LaTeX Font Info: ... okay on input line 39. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 39. -LaTeX Font Info: ... okay on input line 39. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 39. -LaTeX Font Info: ... okay on input line 39. -LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 39. -LaTeX Font Info: ... okay on input line 39. -LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 39. -LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 59. +LaTeX Font Info: ... okay on input line 59. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 59. +LaTeX Font Info: ... okay on input line 59. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 59. +LaTeX Font Info: ... okay on input line 59. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 59. +LaTeX Font Info: ... okay on input line 59. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 59. +LaTeX Font Info: ... okay on input line 59. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 59. +LaTeX Font Info: ... okay on input line 59. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 59. +LaTeX Font Info: ... okay on input line 59. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 59. +LaTeX Font Info: ... okay on input line 59. \c@lstlisting=\count112 LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <24.88> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 41. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 61. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <24.88> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 41. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 61. File: images/u-ryukyu-Mark.eps Graphic file (type eps) <images/u-ryukyu-Mark.eps> (./abstract.tex [1 @@ -232,15 +247,15 @@ LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 2. LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 40. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 46. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 40. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 46. LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10.95> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 40. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 46. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10.95> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 40. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 46. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <10.95> on input line 40. +(Font) <10.95> on input line 46. [1 @@ -249,21 +264,23 @@ \openout5 = `master_paper.toc'. File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [2] (./master_paper.lof) + <images/emblem-bitmap.eps> [2] (./master_paper.lof [3 + +]) \tf@lof=\write6 \openout6 = `master_paper.lof'. - [3 +File: images/emblem-bitmap.eps Graphic file (type eps) -] -(./master_paper.lot) +<images/emblem-bitmap.eps> [4] (./master_paper.lot) \tf@lot=\write7 \openout7 = `master_paper.lot'. - (./introduciton.tex [4 + (./introduciton.tex +[5 ] -第 1 章(vページ) +第 1 章(viページ) LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <17.28> not available (Font) Font shape `JT1/gt/m/n' tried instead on input line 4. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <17.28> not available @@ -272,22 +289,24 @@ (Font) Font shape `JT1/gt/m/n' tried instead on input line 5. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available (Font) Font shape `JY1/gt/m/n' tried instead on input line 5. -) (./chapter1.tex [1 +[1 -] -第 2 章(2ページ) -[2 +]) (./chapter1.tex +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [2] +第 2 章(3ページ) +[3 ] File: ./images/SEDA.pdf Graphic file (type pdf) <./images/SEDA.pdf> File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [3] + <images/emblem-bitmap.eps> [4] File: ./images/benchmark.pdf Graphic file (type pdf) <./images/benchmark.pdf> File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [4] + <images/emblem-bitmap.eps> [5] File: ./images/macmini_cluster_read.pdf Graphic file (type pdf) <./images/macmini_cluster_read.pdf> @@ -297,21 +316,21 @@ []$[]$ $[]$ [] +File: images/emblem-bitmap.eps Graphic file (type eps) +<images/emblem-bitmap.eps> [6] File: ./images/corei7_read.pdf Graphic file (type pdf) -<./images/corei7_read.pdf> + <./images/corei7_read.pdf> File: ./images/corei7_write.pdf Graphic file (type pdf) - <./images/corei7_write.pdf> -Overfull \hbox (2.61108pt too wide) in paragraph at lines 89--103 + +<./images/corei7_write.pdf> +Overfull \hbox (2.61108pt too wide) in paragraph at lines 90--104 []$[]$ $[]$ [] ) (./chapter2.tex File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [5] -File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> -[6] -第 3 章(7ページ) + <images/emblem-bitmap.eps> [7] +第 3 章(8ページ) LaTeX Font Info: Try loading font information for OMS+cmr on input line 12. (/usr/local/texlive/2012/texmf-dist/tex/latex/base/omscmr.fd File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions @@ -326,14 +345,14 @@ <./images/consistency_level_read_heavy.pdf> File: ./images/consistency_level_read_heavy.pdf Graphic file (type pdf) -<./images/consistency_level_read_heavy.pdf> [7 +<./images/consistency_level_read_heavy.pdf> [8 ] File: images/emblem-bitmap.eps Graphic file (type eps) <images/emblem-bitmap.eps> -[8] +[9] File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [9] + <images/emblem-bitmap.eps> [10] File: ./images/destructive_tree_modification.pdf Graphic file (type pdf) <./images/destructive_tree_modification.pdf> @@ -343,7 +362,7 @@ <./images/destructive_tree_modification_in_lace.pdf> File: images/emblem-bitmap.eps Graphic file (type eps) -<images/emblem-bitmap.eps> [10] +<images/emblem-bitmap.eps> [11] File: ./images/nondestructive_tree_modification.pdf Graphic file (type pdf) <./images/nondestructive_tree_modification.pdf> @@ -367,9 +386,9 @@ LaTeX Warning: Float too large for page by 77.65717pt on input line 163. File: images/emblem-bitmap.eps Graphic file (type eps) -<images/emblem-bitmap.eps> [11] +<images/emblem-bitmap.eps> [12] File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [12] + <images/emblem-bitmap.eps> [13] File: ./images/nondestructive_tree_modification_in_lace.pdf Graphic file (type pdf) @@ -382,7 +401,7 @@ [] File: images/emblem-bitmap.eps Graphic file (type eps) -<images/emblem-bitmap.eps> [13] +<images/emblem-bitmap.eps> [14] File: ./images/merge_sample_success.pdf Graphic file (type pdf) <./images/merge_sample_success.pdf> File: ./images/merge_sample_success.pdf Graphic file (type pdf) @@ -392,52 +411,160 @@ <./images/merge_sample_fail.pdf> File: images/emblem-bitmap.eps Graphic file (type eps) -<images/emblem-bitmap.eps> [14] +<images/emblem-bitmap.eps> [15] File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [15] + <images/emblem-bitmap.eps> [16] File: ./images/property_graph.pdf Graphic file (type pdf) <./images/property_graph.pdf> +File: ./images/property_graph_traverse.pdf Graphic file (type pdf) + <./images/property_graph_traverse.pdf> File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [16] -File: ./images/property_graph_traverse.pdf Graphic file (type pdf) -<./images/property_graph_traverse.pdf> +<images/emblem-bitmap.eps> [17] +File: ./images/basic_architecture.pdf Graphic file (type pdf) + <./images/basic_architecture.pdf> File: images/emblem-bitmap.eps Graphic file (type eps) - <images/emblem-bitmap.eps> [17] -File: ./images/basic_architecture.pdf Graphic file (type pdf) -<./images/basic_architecture.pdf>) (./chapter3.tex +<images/emblem-bitmap.eps> [18]) (./chapter3.tex File: images/emblem-bitmap.eps Graphic file (type eps) <images/emblem-bitmap.eps> -[18] -第 4 章(19ページ) -) (./conclusion.tex [19 +[19] +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [20] +第 4 章(21ページ) +LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 17. +[21 ] -第 5 章(20ページ) -) (./thanx.tex [20 +LaTeX Font Info: Font shape `OMS/cmr/m/it' in size <10> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 35. +LaTeX Font Info: Try loading font information for OML+cmr on input line 40. + (/usr/local/texlive/2012/texmf-dist/tex/latex/base/omlcmr.fd +File: omlcmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `OML/cmr/m/n' in size <10> not available +(Font) Font shape `OML/cmm/m/it' tried instead on input line 40. +File: ./images/nodepath.pdf Graphic file (type pdf) + +<./images/nodepath.pdf> +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [22] +File: images/emblem-bitmap.eps Graphic file (type eps) + +<images/emblem-bitmap.eps> [23] +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [24] +File: images/emblem-bitmap.eps Graphic file (type eps) + +<images/emblem-bitmap.eps> [25] +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [26] +File: ./images/node_component.pdf Graphic file (type pdf) + +<./images/node_component.pdf> +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [27] +File: ./images/nodeeditor_component.pdf Graphic file (type pdf) + +<./images/nodeeditor_component.pdf> +Underfull \hbox (badness 2165) in paragraph at lines 297--297 +[]\JY1/mc/m/n/12 非破壊的に編集できる辞書\OT1/cmr/m/n/12 , \JY1/mc/m/n/12 編集 +の際に新しい \OT1/cmr/m/n/12 Ed- + [] + +File: images/emblem-bitmap.eps Graphic file (type eps) +<images/emblem-bitmap.eps> [28] +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [29] +File: images/emblem-bitmap.eps Graphic file (type eps) + +<images/emblem-bitmap.eps> [30]) (./chapter4.tex +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> +[31] +第 5 章(32ページ) + +LaTeX Warning: Reference `fig:board_benchmark' on page 32 undefined on input li +ne 9. + +File: ./images/bulletinboard_benchmark.pdf Graphic file (type pdf) +<./images/bulletinboard_benchmark.pdf> [32 -]) (./master_paper.bbl [21 +] +File: ./images/torque.pdf Graphic file (type pdf) + <./images/torque.pdf> +File: images/emblem-bitmap.eps Graphic file (type eps) + +<images/emblem-bitmap.eps> [33] +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [34] +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 104. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 104. + + +LaTeX Warning: Reference `tab:cluster_spec' on page 35 undefined on input line +109. + +File: images/emblem-bitmap.eps Graphic file (type eps) +<images/emblem-bitmap.eps> [35] +(/usr/local/texlive/2012/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2004/09/05 1.3 listings language file +) +(/usr/local/texlive/2012/texmf-dist/tex/latex/listings/lstlang2.sty +File: lstlang2.sty 2004/09/05 1.3 listings language file +) +File: images/emblem-bitmap.eps Graphic file (type eps) -]) (./appendix.tex [22 +<images/emblem-bitmap.eps> [36] +(/usr/local/texlive/2012/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2004/09/05 1.3 listings language file +) +File: images/emblem-bitmap.eps Graphic file (type eps) + +<images/emblem-bitmap.eps> [37] +File: ./images/read_bldsv10.pdf Graphic file (type pdf) + <./images/read_bldsv10.pdf> + +LaTeX Warning: Reference `fig:benchmark_write_bldsv10' on page 38 undefined on +input line 229. + +File: ./images/write_bldsv10.pdf Graphic file (type pdf) +<./images/write_bldsv10.pdf>) (./conclusion.tex +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> +[38] +File: images/emblem-bitmap.eps Graphic file (type eps) + <images/emblem-bitmap.eps> [39] +第 6 章(40ページ) +) (./thanx.tex [40 + +]) (./master_paper.bbl [41 + +]) (./appendix.tex [42 ]) No file master_paper.ind. -[23 +[43 ] (./master_paper.aux) +LaTeX Warning: There were undefined references. + + LaTeX Warning: There were multiply-defined labels. ) Here is how much of TeX's memory you used: - 2318 strings out of 494059 - 33372 string characters out of 3156205 - 94226 words of memory out of 3000000 - 5686 multiletter control sequences out of 15000+200000 - 19379 words of font info for 75 fonts, out of 3000000 for 9000 + 2803 strings out of 494059 + 39966 string characters out of 3156205 + 223514 words of memory out of 3000000 + 6144 multiletter control sequences out of 15000+200000 + 20082 words of font info for 78 fonts, out of 3000000 for 9000 745 hyphenation exceptions out of 8191 - 33i,11n,32p,357b,905s stack positions out of 5000i,500n,10000p,200000b,50000s + 33i,12n,40p,357b,1896s stack positions out of 5000i,500n,10000p,200000b,50000s -Output written on master_paper.dvi (29 pages, 72776 bytes). +Output written on master_paper.dvi (50 pages, 170032 bytes).
--- a/master_paper.lot Thu Jan 31 20:21:24 2013 +0900 +++ b/master_paper.lot Tue Feb 12 17:50:58 2013 +0900 @@ -1,7 +1,15 @@ \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {table}{\numberline {2.1}{\ignorespaces スケーラビリティ検証環境のマシン性能一覧}}{4} +\contentsline {table}{\numberline {2.1}{\ignorespaces スケーラビリティ検証環境のマシン性能一覧}}{5} +\addvspace {10\p@ } +\contentsline {table}{\numberline {3.1}{\ignorespaces HTML5で実装される新機能}}{18} \addvspace {10\p@ } -\contentsline {table}{\numberline {3.1}{\ignorespaces HTML5で実装される新機能}}{17} +\contentsline {table}{\numberline {4.1}{\ignorespaces コンポーネント一覧}}{25} +\contentsline {table}{\numberline {4.2}{\ignorespaces NodeEditorを構成する要素}}{28} +\contentsline {table}{\numberline {4.3}{\ignorespaces TreeEditorの構成要素}}{30} \addvspace {10\p@ } +\contentsline {table}{\numberline {5.1}{\ignorespaces 簡易掲示板システムで利用したJettyとCassandraのバージョン}}{34} +\contentsline {table}{\numberline {5.2}{\ignorespaces コア数の多いサーバーの仕様}}{34} +\contentsline {table}{\numberline {5.3}{\ignorespaces コア数の少ないサーバーの仕様}}{34} +\contentsline {table}{\numberline {5.4}{\ignorespaces 検証に利用するサーバーの仕様}}{35} \addvspace {10\p@ }
--- a/master_paper.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/master_paper.tex Tue Feb 12 17:50:58 2013 +0900 @@ -8,6 +8,26 @@ \input{dummy.tex} %% font +\lstset{% + language={Java}, + basicstyle={\footnotesize},% + identifierstyle={\footnotesize},% + commentstyle={\footnotesize\itshape},% + keywordstyle={\footnotesize\bfseries},% + ndkeywordstyle={\footnotesize},% + stringstyle={\footnotesize\ttfamily}, + frame={tb}, + breaklines=true, + columns=[l]{fullflexible},% + numbers=left,% + xrightmargin=0zw,% + xleftmargin=1zw,% + numberstyle={\scriptsize},% + stepnumber=1, + numbersep=0.5zw,% + lineskip=-0.5ex% +} + \jtitle{非破壊的木構造を用いた\\分散CMSの設計と実装} \etitle{A design and implementation of the Distributed CMS using Nondestructive tree structure} \year{平成24年度} @@ -57,6 +77,7 @@ \input{chapter1.tex} \input{chapter2.tex} \input{chapter3.tex} +\input{chapter4.tex} \input{conclusion.tex} %謝辞
--- a/master_paper.toc Thu Jan 31 20:21:24 2013 +0900 +++ b/master_paper.toc Tue Feb 12 17:50:58 2013 +0900 @@ -1,52 +1,88 @@ \contentsline {chapter}{\numberline {第1章}序論}{1} \contentsline {section}{\numberline {1.1}序論}{1} \contentsline {subsection}{\numberline {1.1.1}研究背景と目的}{1} -\contentsline {subsection}{\numberline {1.1.2}本論文の構成}{1} -\contentsline {chapter}{\numberline {第2章}分散データベースのスケーラビリティ検証}{2} -\contentsline {section}{\numberline {2.1}はじめに}{2} -\contentsline {section}{\numberline {2.2}スケーラビリティとは}{2} -\contentsline {section}{\numberline {2.3}分散データベース Cassandra}{2} -\contentsline {subsection}{\numberline {2.3.1}Google BigTable}{2} -\contentsline {subsection}{\numberline {2.3.2}Amazon Dynamo}{3} -\contentsline {subsection}{\numberline {2.3.3}SEDA}{3} -\contentsline {section}{\numberline {2.4}分散データベースCassandraのスケーラビリティ検証}{3} -\contentsline {subsubsection}{検証方法}{3} -\contentsline {subsection}{\numberline {2.4.1}検証環境}{4} -\contentsline {subsection}{\numberline {2.4.2}検証結果}{4} -\contentsline {subsubsection}{2Coreを搭載したコア数の少ないサーバーを用いた検証}{4} -\contentsline {subsubsection}{4Core8Threadsを搭載したコア数の多いサーバーを用いた検証}{5} -\contentsline {subsection}{\numberline {2.4.3}まとめ}{6} -\contentsline {chapter}{\numberline {第3章}分散コンテンツマネージメントシステムの設計}{7} -\contentsline {section}{\numberline {3.1}はじめに}{7} -\contentsline {subsection}{\numberline {3.1.1}スケーラブルにするためには}{7} -\contentsline {section}{\numberline {3.2}木構造を用いたデータ表現}{9} -\contentsline {section}{\numberline {3.3}提案手法}{10} -\contentsline {subsection}{\numberline {3.3.1}非破壊的木構造}{10} -\contentsline {subsubsection}{破壊的木構造}{10} -\contentsline {subsubsection}{非破壊的木構造}{11} -\contentsline {subsection}{\numberline {3.3.2}分散バージョン管理システム}{13} -\contentsline {subsubsection}{Push/Pull方式}{13} -\contentsline {subsubsection}{マージ}{14} -\contentsline {subsection}{\numberline {3.3.3}グラフデータベース}{16} -\contentsline {subsubsection}{トラバース}{16} -\contentsline {subsection}{\numberline {3.3.4}ブラウザサイドの実装}{17} -\contentsline {section}{\numberline {3.4}全体の設計}{18} -\contentsline {chapter}{\numberline {第4章}分散コンテンツマネージメントシステムの実装}{19} -\contentsline {section}{\numberline {4.1}はじめに}{19} -\contentsline {section}{\numberline {4.2}開発環境}{19} -\contentsline {subsection}{\numberline {4.2.1}言語}{19} -\contentsline {section}{\numberline {4.3}全体の構造}{19} -\contentsline {section}{\numberline {4.4}木構造の検索}{19} -\contentsline {subsection}{\numberline {4.4.1}Traverser}{19} -\contentsline {section}{\numberline {4.5}木構造読み込み}{19} -\contentsline {subsection}{\numberline {4.5.1}Journal}{19} -\contentsline {section}{\numberline {4.6}木構造への書き込み}{19} -\contentsline {subsection}{\numberline {4.6.1}TreeEditor}{19} -\contentsline {section}{\numberline {4.7}木構造のマージ}{19} -\contentsline {subsection}{\numberline {4.7.1}Merger}{19} -\contentsline {chapter}{\numberline {第5章}結論}{20} -\contentsline {section}{\numberline {5.1}まとめ}{20} -\contentsline {section}{\numberline {5.2}今後の課題}{20} -\contentsline {chapter}{謝辞}{21} -\contentsline {chapter}{参考文献}{22} -\contentsline {chapter}{発表文献}{23} +\contentsline {subsection}{\numberline {1.1.2}本論文の構成}{2} +\contentsline {chapter}{\numberline {第2章}分散データベースのスケーラビリティ検証}{3} +\contentsline {section}{\numberline {2.1}はじめに}{3} +\contentsline {section}{\numberline {2.2}スケーラビリティとは}{3} +\contentsline {section}{\numberline {2.3}分散データベース Cassandra}{4} +\contentsline {subsection}{\numberline {2.3.1}SEDA}{4} +\contentsline {section}{\numberline {2.4}分散データベースCassandraのスケーラビリティ検証}{5} +\contentsline {subsubsection}{検証方法}{5} +\contentsline {subsection}{\numberline {2.4.1}検証環境}{5} +\contentsline {subsection}{\numberline {2.4.2}検証結果}{6} +\contentsline {subsubsection}{2Coreを搭載したコア数の少ないサーバーを用いた検証}{6} +\contentsline {subsubsection}{4Core8Threadsを搭載したコア数の多いサーバーを用いた検証}{7} +\contentsline {subsection}{\numberline {2.4.3}まとめ}{7} +\contentsline {chapter}{\numberline {第3章}分散コンテンツマネージメントシステムの設計}{8} +\contentsline {section}{\numberline {3.1}はじめに}{8} +\contentsline {subsection}{\numberline {3.1.1}スケーラブルにするためには}{8} +\contentsline {section}{\numberline {3.2}木構造を用いたデータ表現}{10} +\contentsline {section}{\numberline {3.3}提案手法}{11} +\contentsline {subsection}{\numberline {3.3.1}非破壊的木構造}{11} +\contentsline {subsubsection}{破壊的木構造}{11} +\contentsline {subsubsection}{非破壊的木構造}{12} +\contentsline {subsection}{\numberline {3.3.2}分散バージョン管理システム}{14} +\contentsline {subsubsection}{Push/Pull方式}{14} +\contentsline {subsubsection}{マージ}{15} +\contentsline {subsection}{\numberline {3.3.3}グラフデータベース}{17} +\contentsline {subsubsection}{トラバース}{17} +\contentsline {subsection}{\numberline {3.3.4}ブラウザサイドの実装}{18} +\contentsline {section}{\numberline {3.4}全体の設計}{19} +\contentsline {subsection}{\numberline {3.4.1}サーバーサイド}{19} +\contentsline {subsection}{\numberline {3.4.2}クライアントサイド}{20} +\contentsline {chapter}{\numberline {第4章}分散コンテンツマネージメントシステムの実装}{21} +\contentsline {section}{\numberline {4.1}はじめに}{21} +\contentsline {section}{\numberline {4.2}木構造データベースJungle}{21} +\contentsline {subsubsection}{木の作成}{21} +\contentsline {subsubsection}{木と木を構成するノード}{22} +\contentsline {subsubsection}{木の編集}{22} +\contentsline {subsubsection}{木の編集にNodeEditorを利用する}{23} +\contentsline {subsubsection}{木のトラバース}{24} +\contentsline {section}{\numberline {4.3}木構造データベースJungleの実装}{25} +\contentsline {subsection}{\numberline {4.3.1}開発環境}{25} +\contentsline {subsubsection}{言語}{25} +\contentsline {subsection}{\numberline {4.3.2}全体の構造}{25} +\contentsline {subsection}{\numberline {4.3.3}型パラメータつきインターフェイスParentの導入}{25} +\contentsline {section}{\numberline {4.4}Node}{27} +\contentsline {section}{\numberline {4.5}NodeEditor}{28} +\contentsline {subsubsection}{EditableNode}{28} +\contentsline {subsubsection}{EditableAttributes}{28} +\contentsline {subsubsection}{EditableChildren}{29} +\contentsline {subsubsection}{NodeEditor}{29} +\contentsline {subsection}{\numberline {4.5.1}TreeEditor}{30} +\contentsline {subsubsection}{TreeNode}{30} +\contentsline {subsubsection}{TreeAttribute}{30} +\contentsline {subsubsection}{TreeNodeChildren}{30} +\contentsline {subsubsection}{TreeEditor}{31} +\contentsline {subsection}{\numberline {4.5.2}Traverser}{31} +\contentsline {subsection}{\numberline {4.5.3}Jungle}{31} +\contentsline {section}{\numberline {4.6}木構造の検索}{31} +\contentsline {subsection}{\numberline {4.6.1}Traverser}{31} +\contentsline {section}{\numberline {4.7}木構造読み込み}{31} +\contentsline {subsection}{\numberline {4.7.1}Journal}{31} +\contentsline {section}{\numberline {4.8}木構造への書き込み}{31} +\contentsline {subsection}{\numberline {4.8.1}TreeEditor}{31} +\contentsline {section}{\numberline {4.9}木構造のマージ}{31} +\contentsline {subsection}{\numberline {4.9.1}Merger}{31} +\contentsline {chapter}{\numberline {第5章}木構造データベースJungleを用いたCMSの検証}{32} +\contentsline {section}{\numberline {5.1}はじめに}{32} +\contentsline {section}{\numberline {5.2}実験方法}{32} +\contentsline {subsubsection}{Torque ResourceManager}{33} +\contentsline {subsubsection}{簡易掲示板システム}{33} +\contentsline {subsection}{\numberline {5.2.1}実験環境}{34} +\contentsline {subsubsection}{サーバー}{34} +\contentsline {subsubsection}{サーバーのnf\_conntrack}{35} +\contentsline {subsubsection}{クラスタ}{35} +\contentsline {section}{\numberline {5.3}実験}{36} +\contentsline {section}{\numberline {5.4}実験結果}{38} +\contentsline {subsection}{\numberline {5.4.1}コア数が多いサーバーを利用した読み込みの検証}{38} +\contentsline {subsection}{\numberline {5.4.2}コア数が多いサーバーを利用した書き込みの検証}{38} +\contentsline {subsection}{\numberline {5.4.3}コア数が少ないサーバーを利用した読み込みの検証}{38} +\contentsline {subsection}{\numberline {5.4.4}コア数が少ないサーバーを利用した書き込みの検証}{38} +\contentsline {chapter}{\numberline {第6章}結論}{40} +\contentsline {section}{\numberline {6.1}まとめ}{40} +\contentsline {section}{\numberline {6.2}今後の課題}{40} +\contentsline {chapter}{謝辞}{41} +\contentsline {chapter}{参考文献}{42} +\contentsline {chapter}{発表文献}{43}
--- a/thanx.tex Thu Jan 31 20:21:24 2013 +0900 +++ b/thanx.tex Tue Feb 12 17:50:58 2013 +0900 @@ -1,4 +1,8 @@ \chapter*{謝辞} \addcontentsline{toc}{chapter}{謝辞} -ありがとうございました。 +本研究を行うにあたり, ご多忙にも関わらず日頃より多くの助言, ご指導をいただきました河野真治助教授に心より感謝いたします.\\ +また, 様々な研究や勉強の機会を与えてくださった, 株式会社Symphonyの永山辰巳さん, 同じく様々な助言を頂いた森田育宏さんに感謝いたします. +様々な研究に関わることで自身の研究にも役立てることが出来ました.\\ +研究を行うにあたり, 並列計算環境の調整, 意見, 実装に協力いただいた大城信康さん, 谷成雄さん, 並列信頼研究室の全てのメンバーに感謝いたします.\\ +最後に, 大学の修士まで支えてくれた家族の方々に深く感謝します.