view benchMark.tex @ 27:796c18a4aa0d

add slide
author tatsuki
date Sun, 12 Feb 2017 16:24:24 +0900
parents 4365c210d1cb
children
line wrap: on
line source

\chapter{性能測定}
前章までに、Jungle へ行った改善点・開発したアプリケーションについて述べた。
本章では、実装した新機能の性能測定を行う。
また、最後に既存のDBとの検索速度の比較を行う。
比較対象には、MongoDBとPostgreSQLを選択した。

\section{測定環境}
表\ref{environment}に、測定を行ったマシンの環境を記述する。

\begin{table}[htb]
\begin{center}
\caption{実験環境}
\begin{tabular}{|p{15em}|p{24em}|}        \hline
OS         &  MacOS Sierra 10.12.3 \\ \hline
Memory     &  16 GB 1600 MHz DDR3 \\ \hline
CPU        &  2.5 GHz Intel Core i7\\ \hline
Java       &  1.8.0.111 \\ \hline
mongoDB    &  3.4.1\\ \hline
PostgreSQL & 9.6.1 \\ \hline
\end{tabular}
\label{environment}
\end{center}
\end{table}



\newpage

\section{TreeMapの測定}
6章で実装した TreeMap の性能測定を行う。
比較対象には、 TreeMap 実装前に Jungle で使用していた Functional Java の TreeMap を使用する。

図\ref{find}は、 TreeMap に1000回の Get を行った際のグラフである。
X 軸は Get を行う TreeMap のノード数。
Y 軸は Get にかかった時間を表す。

\begin{figure}[htpb]
\begin{center}
\includegraphics[scale=0.6,angle=-90]{result/treemap/find.pdf}
\caption{TreeMap への Get}
\end{center}
\label{find}
\end{figure}

\ref{find}より、Functional Java の TreeMap と比較して、 Jungle の TreeMap の方が非常に高速に動いている。
理由として、Jungle の TreeMap は、検索対象の値を持つノードを、二分探索木の探索アルゴリズムに則り探索するのに対し、
Functional Java の TreeMap は、検索対象のノードがルートになる木を構築し、ルートを返す。といったアルゴリズムを採用していため、
探索アルゴリズムの差が図\ref{find}の結果に出た。
その他の処理についても、Jungleの TreeMap の方が高速に動作していた。

\newpage
\section{Index の差分 Update の測定}
7章で実装した、Index の差分 Update の測定を行う。
図\ref{index}は、Index の差分 Update と FullUpdate の速度比較のグラフである。
測定は、木にノードを追加、Commit を1セットの変更として行う。
X 軸は、木に行った変更のセット数。
Y 軸は、木の構築にかかった時間を表す。

\begin{figure}[htpb]
\begin{center}
\includegraphics[scale=0.6]{result/createIndex.pdf}
\caption{IndexのUpdate}
\label{index}
\end{center}
\end{figure}

図\ref{index}より、Index の Full Update に比べて差分 Updateの方が高速に木の構築に成功している。 
しかし、Jungleでは木に変更を加える際、毎回 Commit を行うわけでなく、 基本的に複数回変更を行った後、一気にCommit を行う。
差分 Update は、変更を加えたノードを記憶し、 Commit 時に Index の更新を行う。
一方、Full Update では、 Commit を行うまでに木に加えた変更の数に関係なく、新しい Index を構築する。
よって、 Commit 前の木の編集回数が増えた場合、 Index の Full Update と 差分 Update では、差分 Update の方が、Index に対して多くの変更を行うことになる。
そのため、Commit を行うまでの 木に対する変更回数によっては、 Full Update の方が高速に Index の構築を行える可能性がある。

そこで、図\ref{index2}に、Commit を行うまでに行った木の編集回数と、 Index の Update 速度の測定結果を記述する。
X 軸は、1回の Commit を行うまでに木に行った編集回数。
Y 軸は、Commit にかかった時間を表す。
\begin{figure}[htpb]
\begin{center}
\includegraphics[scale=0.6,angle = -90]{result/createIndex2.pdf}
\caption{Commit を行うまでに木に加えた変更回数と、 Index の構築時間}
\label{index2}
\end{center}
\end{figure}

図\ref{index2} より、Commit の前に行った木の編集回数に関係なく、基本的に Index の更新は差分 Update の方が早いことがわかった。


\newpage
\section{正順の線形木の構築時間の測定}
8章で実装した、 Differential Jungle Tree の性能測定を行う。
比較対象は、Default Jungle Tree を用いる。
図\ref{dfTree}は、正順の木を構築するまでにかかった時間のグラフである。
X 軸は、構築した木のノード数。
Y 軸は、構築にかかった時間を表す。
また、木のみを構築する時間を測定するため、Index は作っていない。

\begin{figure}[htpb]
\begin{center}
\includegraphics[scale=0.6]{result/createListTree.pdf}
\caption{Differential Tree と Default Jungle Tree}
\label{dfTree}
\end{center}
\end{figure}

図\ref{dfTree}より、Default Jungle Tree より、Differential Jungle Tree の方が高速に木の構築している。
これは、Default Jungle Tree が、木を構築する際に複製を行うのに対し、Differential Jungle Tree は複製を行っていないからである。
期待通りの結果が出たといえる。


\section{Red Black Jungle Tree の測定}
9章で実装した、Red Black Jungle Tree の性能測定を行う。
比較対象は、Default Jungle Tree を用いる。
図\ref{redblack}は、木を構築するまでにかかった時間のグラフである。
X 軸は、構築した木のノード数。
Y 軸は、構築にかかった時間を表す。

\begin{figure}[htpb]
\begin{center}
\includegraphics[scale=0.6,angle=-90]{result/createRedBlackTreeAndDefaultTreeTime.pdf}
\caption{Red Black Jungle Tree と Default Jungle Tree}
\label{redblack}
\end{center}
\end{figure}

図\ref{redblack}より、Default Jungle Tree より、 Red Black Jungle Tree の方が高速に木を構築している。
これは、Default Jungle Tree が、木を構築する際に Index を生成しているのに対し、 Red Black Jungle Tree は、自身の木構造が Index と同等の働きを持つため、Index を構築する必要がないからである。

\section{既存のデータベースとの比較}
Jungle と既存のデータベースとの比較を行う。
比較対象は PostgreSQL と mongoDB を選択した。
データの検索の速度を比較した。
図\ref{compareDB}に結果のグラフを記述する。
X 軸は、データベースのデータ数。
Y 軸は、検索にかかった時間を表す。
\begin{figure}[htpb]
\begin{center}
\includegraphics[scale=0.6,angle=-90]{result/comparedb.pdf}
\caption{既存の DB との比較}
\label{compareDB}
\end{center}
\end{figure}

図\ref{compareDB}より、Jungle は PostgreSQL と mongDB と比較して、非常に高速な検索を行えている。
理由として、PostgreSQL と mongoDB は、通信を介してデータにアクセスするのに対し、Jungle は、アプリケーション内にデータがあるため、通信を介さないためだと考えられる。