diff shoshi-paper.tex @ 0:50a9279c19eb

hg init and added section of Monotonic-Tree Modification
author Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
date Sun, 07 Aug 2011 01:55:35 +0900
parents
children 600b5de23cc6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shoshi-paper.tex	Sun Aug 07 01:55:35 2011 +0900
@@ -0,0 +1,174 @@
+% Sample file for the use of compsoft style file.
+%
+\documentclass[T]{compsoft}
+
+% Preamble
+%
+% 「コンピュータソフトウェア」誌に掲載される論文の場合,次で
+% 巻数,号数,開始ページ,終了ページを指定する.
+%\volNoPp{16}{5}{78}{83}
+
+% ワークショップによる推薦論文の場合,ワークショップ名を指定する.
+% \suisen{ワークショップ名}
+
+% 特集の場合,特集のタイトルを与える.
+% \tokushu{特集のタイトル}
+
+% 大会論文の場合,\taikai で開催年を指定する.ここで指定した年から
+% 大会の回数は計算される.
+\taikai{2011}
+
+% ここに,使用するパッケージを列挙する.
+\usepackage[dvipdfm]{graphicx}
+\usepackage{mediabb}
+\usepackage{url}
+
+% ユーザが定義したマクロなどはここに置く.ただし学会誌のスタイルの
+% 再定義は原則として避けること.
+
+\begin{document}
+
+% 論文のタイトル
+\title{Cassandraと非破壊的構造を用いたCMSのスケーラビリティ検証環境の構築}
+
+% 著者
+% 和文論文の場合,姓と名の間には半角スペースを入れ,
+% 複数の著者の間は全角スペースで区切る
+%
+\author{玉城 将士 \and 河野 真治
+%
+% ここにタイトル英訳 (英文の場合は和訳) を書く.
+%
+\ejtitle{Constructing Scalability Evaluation Environment for CMS using Monotonic-Tree Operation and Cassandra}
+%
+% ここに著者英文表記 (英文の場合は和文表記) および
+% 所属 (和文および英文) を書く.
+% 複数著者の所属はまとめてよい.
+%
+\shozoku{Shoshi TAMAKI, Shinji KONO}{琉球大学理工学研究科情報工学専攻}
+{Dept. \ of Information Engineering, Ryukyu University}
+%
+% 出典情報は \shutten とすれば出力される.
+%\shutten
+%
+% 受付年月日,記事カテゴリなどは自動的に生成される.
+%\uketsuke{1999}{8}{3}
+%
+% その他,脚注に入れるものがあれば,\note に記述する.
+%\note{脚注に入れる内容}
+}
+
+%
+% 和文アブストラクト
+\Jabstract{%
+本研究では,スケーラビリティのあるCMSを開発するために,PCクラスタを利用したスケーラビリティの検証環境を構築し,ロックフリーな木構造である非破壊的木構造・多段キャッシュ・Cassandraを用いた設計と実装を行って来た.今回は,実装したシステムのスケーラビリティを検証するため,構築したスケーラビリティの検証環境を用いてベンチマークを取り,スケーラビリティがあるか確認するために,環境構築を行った.また,非破壊的木構造をバランス木に応用し,バランス木の性能であるO(log N)を保ちつつ並列に読み・書き込みが可能である辞書アルゴリズムの提案をする.
+}
+%
+% 英文アブストラクト(大会論文には必要なし)
+% \Eabstract{}
+%
+\maketitle
+
+\section{はじめに}
+ Cassandraは複数のサーバーで動作を想定した分散データベースである.本研究は,Cassandraの検証と非破壊的木構造を用いたスケーラビリティのあるCMSの設計と開発を行った.
+非破壊的木構造を用いたCMSのとは,木構造で表すことの出来るコンテンツを編集する際に,編集元の木構造を破壊することなく編集するアルゴリズムである.これを利用してCassandra上に非破壊的木構造を構築しCMSを実装することができた.\\
+ 本研究では,開発したCMSのスケーラビリティの検証を行うため,仮想環境を用いた検証環境の構築と管理ソフトウェアを開発した.
+\section{分散データベースCassandra}
+	Cassandraは, FaceBookが自社のために開発した分散Key-Valueストアデータベースであり,Dynamo\cite{DYNAMO}とBigTable\cite{BIGTABLE}を合わせた特徴を持っている. 2008年にオープンソースとして公開され, 2009年にApache Incubatorのプロジェクトとなった.
+2010年にはApacheのトップレベルプロジェクトとなり, 現在でも頻繁にバージョンアップが行われている. \\
+\section{非破壊的木構造}
+ 非破壊的木構造とは,木構造を編集する際に編集元の木構造を破壊することなく,新しく木構造を構築する.新しい木構造のルートノードを置き換えることにより編集する方法である.\\
+非破壊的に変更することで,編集元の破壊することなく編集することが出来るため,木構造の整合性を保ちつつ変更することが可能になる.
+\subsection{木構造の破壊的変更}
+ 従来の破壊的木構造は,存在する木構造を書き換えて編集する.以下の様な操作を行う.\\
+\begin{figure}[!htbp]
+\begin{center}
+	\includegraphics[scale=0.5]{dest-tree1.pdf}
+\end{center}
+\caption{木構造の破壊的変更例}
+\label{fig:dest-tree1}
+\end{figure}
+ 図\ref{fig:dest-tree1}の操作では,ノード$F$の内容をノード$G$に書き換える操作を行った.破壊的変更では,単純に編集したいノードを書き換えることにより行われる.この操作では,編集時に木を参照している処理がある場合,参照されている木構造を破壊するため,参照を開始した自転での木構造の整合性が破壊されるという問題が起きる.\\
+\begin{figure}[!htbp]
+\begin{center}
+	\includegraphics[scale=0.4]{dest-tree2.pdf}
+\end{center}
+\caption{破壊的変更の問題点}
+\label{fig:dest-tree2}
+\end{figure}
+この問題を解決するためには,木構造の操作に排他制御を取り入れてロックする必要がある.しかし,その方法ではスケーラビリティを確保できるとは考えられないため,非破壊的な変更を方法を用いて木構造を編集する.
+\subsection{木構造の非破壊的変更}
+木構造の非破壊的な変更は,編集元の木構造を破壊せずに編集を行う,編集の様子を図\ref{fig:mono-tree1}に示す.図\ref{fig:mono-tree1}では図\ref{fig:dest-tree1}と同様にノード$F$の内容をノード$G$に書き換える処理を行っている.\\
+\begin{figure}[!htbp]
+\begin{center}
+	\includegraphics[scale=0.4]{mono-tree1.pdf}
+\end{center}
+\caption{木構造の非破壊的変更例}
+\label{fig:mono-tree1}
+\end{figure}
+ この方法での編集は以下の手順を用いて行われる.
+\begin{enumerate}
+	\item{ルートノードであるノード$A$から編集対象であるノード$F$までのパスをコピーする.(ノード$A,C,F$をコピーする)}
+	\item{パスに含まれないノードは編集元のノードと共有する.(コピーノード$A$からノード$B$へリンクを作成する)}
+	\item{編集対象であるノード$F$は編集せず,コピーしたノード$F$をノード$G$へと編集する.}
+	\item{木構造のルートノードをノード$A$からコピーしたノード$A$へと置き換える.}
+\end{enumerate}
+この手順では,元の木構造は破壊されることは無い,そのため木の閲覧者が存在していても閲覧している木構造の整合性が破壊されることはない.
+よって,並列に読み書きを行うことが出来る.
+
+\subsection{応用例:非破壊的木構造を用いた二分木辞書}
+ この方法の応用例として非破壊的木構造とバランス木を用いた二分木辞書を考えることが出来る.二分木辞書とは二分探索を用いたO(lg n)を保証する辞書アルゴリズムである.二分木辞書では,バランスのとれた木構造を維持するためにバランス木のアルゴリズムを利用する.
+これらのアルゴリズムと非破壊的木構造を組み合わせることにより,並列に読み書きを行うことが出来る辞書を作成することが出来る.
+また,この辞書アルゴリズムの利点として辞書全体のコピーにかかる計算量がO(1)で済むことも利点の一つである.
+\subsubsection{AVL-Treeを用いた非破壊的二分木辞書}
+ 実装例として,AVL-Treeを用いた非破壊的二分木辞書を紹介する.この辞書は読み書きがO(lg n)かつ辞書の複製のコストがO(1)で有ることを保証する.
+\begin{enumerate}
+\item{辞書の読み込み}\\
+ 非破壊二分木辞書の読み込みは通常の二分木と同様で,ルートノードよりキーの大小関係を比較し値を検索する.そのため,省略する.
+キーを検索する際に,二分木辞書で使われている木構造は破壊されることがないため,並列に行うことが出来き,スレッドセーフである.
+\item{辞書の書き込み}\\
+ 非破壊辞書の書き込みは以下の手順で行われる.
+\begin{enumerate}
+\item{二分木探索より,書きこむ場所を特定する.この時,同時に通過したノードのコピーを行う.}
+\begin{figure}[!htbp]
+\begin{center}
+	\includegraphics[scale=0.4]{mono-dic1.pdf}
+\end{center}
+\caption{手順1:ノードのコピーと書き込み}
+\label{fig:mono-dic1}
+\end{figure}
+\\ この例では,木構造に新しくノード$7$を追加する.そのため,編集元の二分木より$50,25,15$のノードをコピーする.他の影響のない$100,35$は共有する.
+\item{ローカルにコピーしたノードを編集し,書き込みむ}
+\\ 次に,コピーした木構造を編集し書き込みを行う.図\ref{fig:mono-dic1}の例ではノード$15$の右部分に新しくノード$7$を追加する.
+\item{コピーし編集したノードよりルートノードまでを走査し,木の回転が必要な場合は回転させる.}
+\begin{figure}[!htbp]
+\begin{center}
+	\includegraphics[scale=0.4]{mono-dic2.pdf}
+\end{center}
+\caption{手順2:コピーした木構造のバランス}
+\label{fig:mono-dic2}
+\end{figure}
+\\ 新しく構築した二分木のバランスさせるために木構造を追加したノードよりルートノードまで辿りバランスを確認する.図\ref{fig:mono-dic2}ではノードを$7-15-25-50$とルートへとバランスを確認し,回転が必要であるノード$50$の位置で木の回転を行う.
+\item{CASを用いて,ルートノードへの参照を入れ替える.}
+最後に,二分木辞書がルートノードとして保持している編集元の木構造を,新しい木構造へと置き換える.この時CASを使用することによりアトミックに置き換える.他のスレッドがこの木構造を編集し置き換えていた場合,この処理は失敗する.その場合,再度,非破壊的に編集を行う.
+\begin{figure}[!htbp]
+\begin{center}
+	\includegraphics[scale=0.4]{mono-dic3.pdf}
+\end{center}
+\caption{手順3:非破壊的に編集した木構造の適用}
+\label{fig:mono-dic2}
+\end{figure}
+\end{enumerate}
+\item{辞書のコピー}\\
+ 非破壊辞書のコピーは,単にルートノードを共有するだけで行うことが出来る.木構造は破壊されないため,元の木構造は不変である.共有した木構造を元にローカル新しい木構造を作成していくため,問題は起きない.\\よって,この場合の計算量は定数でありO(1)である.
+\end{enumerate}
+この二分木辞書は主に,辞書をコピーするときに効果を発揮する.
+
+\section{非破壊的木構造を用いたCMS}
+\section{検証環境の構築}
+本検証では,前回行ったPCクラスタによるスケーラビリティの検証環境とは異なり,ブレードサーバー上に検証環境構築する.ブレードサーバーとは
+\subsection{仮想環境}
+\subsection{仮想化管理ツールの実装}
+\section{まとめ}
+
+\end{document}