annotate benchMark.tex @ 18:d5306971efbf

eng abst
author tatsuki
date Fri, 10 Feb 2017 10:24:52 +0900
parents 4d66607c369c
children 4365c210d1cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
tatsuki
parents:
diff changeset
1 \chapter{性能測定}
tatsuki
parents:
diff changeset
2
tatsuki
parents:
diff changeset
3 前章までに、Jungle へ行った改善点・開発したアプリケーションについて述べた。
tatsuki
parents:
diff changeset
4 本章では、実装した新機能の性能測定を行う。
tatsuki
parents:
diff changeset
5
tatsuki
parents:
diff changeset
6
tatsuki
parents:
diff changeset
7 \section{測定環境}
tatsuki
parents:
diff changeset
8 表\ref{environment}に、測定を行ったマシンの環境を記述する。
tatsuki
parents:
diff changeset
9
tatsuki
parents:
diff changeset
10 \begin{table}[htb]
tatsuki
parents:
diff changeset
11 \begin{center}
tatsuki
parents:
diff changeset
12 \caption{実験環境}
tatsuki
parents:
diff changeset
13 \begin{tabular}{|p{15em}|p{24em}|} \hline
tatsuki
parents:
diff changeset
14 OS & MacOS Sierra 10.12.3 \\ \hline
tatsuki
parents:
diff changeset
15 Memory & 16 GB 1600 MHz DDR3 \\ \hline
tatsuki
parents:
diff changeset
16 CPU & 2.5 GHz Intel Core i7\\ \hline
tatsuki
parents:
diff changeset
17 Java & 1.8.0.111 \\ \hline
tatsuki
parents:
diff changeset
18 mongoDB & 3.4.1\\ \hline
tatsuki
parents:
diff changeset
19 PostgreSQL & 9.6.1 \\ \hline
tatsuki
parents:
diff changeset
20 \end{tabular}
tatsuki
parents:
diff changeset
21 \label{environment}
tatsuki
parents:
diff changeset
22 \end{center}
tatsuki
parents:
diff changeset
23 \end{table}
tatsuki
parents:
diff changeset
24
tatsuki
parents:
diff changeset
25
tatsuki
parents:
diff changeset
26
tatsuki
parents:
diff changeset
27 \newpage
tatsuki
parents:
diff changeset
28
tatsuki
parents:
diff changeset
29 \section{TreeMapの測定}
tatsuki
parents:
diff changeset
30 5章で実装した TreeMap の性能測定を行う。
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
31 比較対象には、 TreeMap 実装前に Jungle で使用していた Functional Java の TreeMap を使用する。
17
tatsuki
parents:
diff changeset
32
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
33 図\ref{find}は、 TreeMap に1000回の Get を行った際のベンチマークである。
17
tatsuki
parents:
diff changeset
34 X 軸は Get を行う TreeMap のノード数。
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
35 Y 軸は Get にかかった時間を表す
17
tatsuki
parents:
diff changeset
36
tatsuki
parents:
diff changeset
37 \begin{figure}[htpb]
tatsuki
parents:
diff changeset
38 \begin{center}
tatsuki
parents:
diff changeset
39 \includegraphics[scale=0.6,angle=-90]{result/treemap/find.pdf}
tatsuki
parents:
diff changeset
40 \caption{TreeMap への Get}
tatsuki
parents:
diff changeset
41 \end{center}
tatsuki
parents:
diff changeset
42 \label{find}
tatsuki
parents:
diff changeset
43 \end{figure}
tatsuki
parents:
diff changeset
44
tatsuki
parents:
diff changeset
45 \ref{find}より、Functional Java の TreeMap と比較して、 Jungle の TreeMap の方が非常に高速に動いている。
tatsuki
parents:
diff changeset
46 理由として、Jungle の TreeMap は、検索対象の値を持つノードを、二分探索木の探索アルゴリズムに則り探索するのに対し、
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
47 Functional Java の TreeMap は、検索対象のノードがルートになる木を構築し、ルートを返す。といったアルゴリズムを採用していため、
17
tatsuki
parents:
diff changeset
48 探索アルゴリズムの差が図\ref{find}の結果に出た。
tatsuki
parents:
diff changeset
49 その他の処理についても、Jungleの TreeMap の方が高速に動作していた。
tatsuki
parents:
diff changeset
50
tatsuki
parents:
diff changeset
51 \newpage
tatsuki
parents:
diff changeset
52 \section{Index の差分 Update の測定}
tatsuki
parents:
diff changeset
53 6章で実装した、Index の差分 Update の測定を行う。
tatsuki
parents:
diff changeset
54 図\ref{index}は、Index の差分 Update と FullUpdate の両方で木のCommitを行った際のグラフである。
tatsuki
parents:
diff changeset
55 測定は、木にノードを追加、Commit を1セットの変更として行う。
tatsuki
parents:
diff changeset
56 X 軸は、木に行った変更のセット数。
tatsuki
parents:
diff changeset
57 Y 軸は、Commit にかかった時間を表す。
tatsuki
parents:
diff changeset
58
tatsuki
parents:
diff changeset
59 \begin{figure}[htpb]
tatsuki
parents:
diff changeset
60 \begin{center}
tatsuki
parents:
diff changeset
61 \includegraphics[scale=0.6]{result/createIndex.pdf}
tatsuki
parents:
diff changeset
62 \caption{IndexのUpdate}
tatsuki
parents:
diff changeset
63 \label{index}
tatsuki
parents:
diff changeset
64 \end{center}
tatsuki
parents:
diff changeset
65 \end{figure}
tatsuki
parents:
diff changeset
66
tatsuki
parents:
diff changeset
67 図\ref{index}より、Index の Full Update は、グラフがO(n\verb|^|2)なのに対し、 差分 Update は、O(n)で行えている。
tatsuki
parents:
diff changeset
68
tatsuki
parents:
diff changeset
69 しかし、Jungleでは木に変更を加える際、毎回 Commit を行うわけでなく、 基本的に複数回変更を行った後、一気にCommit を行う。
tatsuki
parents:
diff changeset
70 差分 Update は、変更を加えたノードを記憶し、 Commit 時に Index の更新を行う。
tatsuki
parents:
diff changeset
71 一方、Full Update では、 Commit を行うまでに木に加えた変更の数に関係なく、新しい Index を構築する。
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
72 よって、 Commit を行うまでに行う木の編集回数が増えた場合、 Index の Full Update と 差分 Update では、差分 Update の方が、Index に対して多くの変更を行うことになる。
17
tatsuki
parents:
diff changeset
73 そのため、Commit を行うまでの 木に対する変更回数によっては、 Full Update の方が高速に Index の構築を行える可能性がある。
tatsuki
parents:
diff changeset
74
tatsuki
parents:
diff changeset
75 そこで、図\ref{index2}に、Commit を行うまでに行った木の編集回数と、 Index の Update 速度の測定結果を記述する。
tatsuki
parents:
diff changeset
76 X軸は、1回の Commit を行うまでに木に行った変更のセット回数。
tatsuki
parents:
diff changeset
77 Y軸は、Commit にかかった時間を表す。
tatsuki
parents:
diff changeset
78 また、構築する木のノード数は1000ノードとする。
tatsuki
parents:
diff changeset
79 \begin{figure}[htpb]
tatsuki
parents:
diff changeset
80 \begin{center}
tatsuki
parents:
diff changeset
81 \includegraphics[scale=0.6,angle = -90]{result/createIndex2.pdf}
tatsuki
parents:
diff changeset
82 \caption{Commit を行うまでに木に加えた変更回数と、 Index の構築時間}
tatsuki
parents:
diff changeset
83 \label{index2}
tatsuki
parents:
diff changeset
84 \end{center}
tatsuki
parents:
diff changeset
85 \end{figure}
tatsuki
parents:
diff changeset
86
tatsuki
parents:
diff changeset
87 図\ref{index2} より、Commit の前に行った木の編集回数に関係なく、基本的に Index の更新は差分 Update の方が早いことがわかった。
tatsuki
parents:
diff changeset
88
tatsuki
parents:
diff changeset
89
tatsuki
parents:
diff changeset
90 \newpage
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
91 \section{正順の線形木の構築時間の測定}
17
tatsuki
parents:
diff changeset
92 7章で実装した、 Differential Jungle Tree の性能測定を行う。
tatsuki
parents:
diff changeset
93 比較対象は、Default Jungle Tree を用いる。
tatsuki
parents:
diff changeset
94 図\ref{dfTree}は、正順の木を構築するまでにかかった時間のベンチマークである。
tatsuki
parents:
diff changeset
95 X 軸は、構築した木のノード数。
tatsuki
parents:
diff changeset
96 Y 軸は、構築にかかった時間を表す。
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
97 また、木のみを構築する時間を測定するため、Index は作っていない。
17
tatsuki
parents:
diff changeset
98
tatsuki
parents:
diff changeset
99 \begin{figure}[htpb]
tatsuki
parents:
diff changeset
100 \begin{center}
tatsuki
parents:
diff changeset
101 \includegraphics[scale=0.6]{result/createListTree.pdf}
tatsuki
parents:
diff changeset
102 \caption{Differential Tree と Default Jungle Tree}
tatsuki
parents:
diff changeset
103 \label{dfTree}
tatsuki
parents:
diff changeset
104 \end{center}
tatsuki
parents:
diff changeset
105 \end{figure}
tatsuki
parents:
diff changeset
106
tatsuki
parents:
diff changeset
107 図\ref{dfTree}より、Default Jungle Tree より、Differential Jungle Tree の方が高速に木の構築している。
18
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
108 これは、Default Jungle Tree が、木を構築する際に複製を行うのに対し、Differential Jungle Tree は複製を行っていないからである。
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
109 期待通りの結果が出たといえる。
d5306971efbf eng abst
tatsuki
parents: 17
diff changeset
110
17
tatsuki
parents:
diff changeset
111
tatsuki
parents:
diff changeset
112 \section{Red Black Jungle Tree の測定}
tatsuki
parents:
diff changeset
113 8章で実装した、Red Black Jungle Tree の性能測定を行う。
tatsuki
parents:
diff changeset
114 比較対象は、Default Jungle Tree を用いる。
tatsuki
parents:
diff changeset
115 図\ref{redblack}は、正順の木を構築するまでにかかった時間のベンチマークである。
tatsuki
parents:
diff changeset
116 X 軸は、構築した木のノード数。
tatsuki
parents:
diff changeset
117 Y 軸は、構築にかかった時間を表す。
tatsuki
parents:
diff changeset
118
tatsuki
parents:
diff changeset
119 \begin{figure}[htpb]
tatsuki
parents:
diff changeset
120 \begin{center}
tatsuki
parents:
diff changeset
121 \includegraphics[scale=0.6]{result/createRedBlackTreeAndDefaultTreeTime.pdf}
tatsuki
parents:
diff changeset
122 \caption{Red Black Jungle Tree と Default Jungle Tree}
tatsuki
parents:
diff changeset
123 \label{redblack}
tatsuki
parents:
diff changeset
124 \end{center}
tatsuki
parents:
diff changeset
125 \end{figure}
tatsuki
parents:
diff changeset
126
tatsuki
parents:
diff changeset
127 図\ref{redblack}より、Default Jungle Tree より、 Red Black Jungle Tree の方が高速に木を構築している。
tatsuki
parents:
diff changeset
128 これは、Default Jungle Tree が、木を構築する際に Index を生成しているのに対し、 Red Black Jungle Tree は、自身の木構造が Index と同等の働きを持つため、Index を構築する必要がない。
tatsuki
parents:
diff changeset
129 その差が出たためである。
tatsuki
parents:
diff changeset
130
tatsuki
parents:
diff changeset
131 \section{既存のデータベースとの比較}
tatsuki
parents:
diff changeset
132 Jungle と既存のデータベースとの比較を行う。
tatsuki
parents:
diff changeset
133 比較対象は PostgreSql と mongoDB を選択した。
tatsuki
parents:
diff changeset
134 検索対象のデータは10000件。
tatsuki
parents:
diff changeset
135 データの検索の速度を比較した。
tatsuki
parents:
diff changeset
136 図\ref{compareDB}に結果のグラフを記述する。
tatsuki
parents:
diff changeset
137
tatsuki
parents:
diff changeset
138 \begin{figure}[htpb]
tatsuki
parents:
diff changeset
139 \begin{center}
tatsuki
parents:
diff changeset
140 \includegraphics[scale=0.6,angle=-90]{result/findTime.pdf}
tatsuki
parents:
diff changeset
141 \caption{既存の DB との比較}
tatsuki
parents:
diff changeset
142 \label{compareDB}
tatsuki
parents:
diff changeset
143 \end{center}
tatsuki
parents:
diff changeset
144 \end{figure}
tatsuki
parents:
diff changeset
145
tatsuki
parents:
diff changeset
146 図\ref{compareDB}より、Jungle は PostgreSql と mongDB と比較して、非常に高速な検索を行えている。
tatsuki
parents:
diff changeset
147 理由として、PostgreSql と mongoDB は、通信を介してデータにアクセスするのに対し、Jungle は、アプリケーション内にデータがあるため、通信を介さないためだと考えられる。