comparison chapter2.tex @ 1:1ddca33b4d4e

added property_graph_traverse etc..
author Shoshi TAMAKI
date Wed, 23 Jan 2013 11:15:53 +0900
parents bf82975fa7f5
children 83ddc73ce79b
comparison
equal deleted inserted replaced
0:bf82975fa7f5 1:1ddca33b4d4e
195 \label{fig:distributed_and_normal_repository} 195 \label{fig:distributed_and_normal_repository}
196 \end{figure} 196 \end{figure}
197 197
198 \subsubsection{Push/Pull方式} 198 \subsubsection{Push/Pull方式}
199 Push/Pull方式とは, 分散レポジトリで利用されているレポジトリの結合方法の1つである. 199 Push/Pull方式とは, 分散レポジトリで利用されているレポジトリの結合方法の1つである.
200 分散バージョン管理システムでのレポジトリはお互いにPush/Pullを用いて自身の更新を通知・受信することができる. 200 分散バージョン管理システムでのレポジトリはお互いにPush/Pullを用いて自身の更新を通知・受信することができる.\\
201 Pushとは, あるレポジトリが異なるレポジトリに自分の持つ更新を通知することで, Pullは, その逆の更新を他のレポジトリより受信することである. 201 Pushとは, あるレポジトリが異なるレポジトリに自分の持つ更新を通知することで, Pullは, その逆の更新を他のレポジトリより受信することである.
202 また, 異なる履歴を持つレポジトリ同士がPush/Pullを行う時お互いの更新がしょうとする可能性が考えられる, これらの問題はマージを用いることで解決する. 202 また, 異なる履歴を持つレポジトリ同士がPush/Pullを行う時お互いの更新がしょうとする可能性が考えられる, これらの問題はマージを用いることで解決する.\\
203 これを我々が提案した方法に当てはめると以下のようになる. 203 これを我々が提案した方法に当てはめると以下のようになる.
204 204
205 \begin{itemize} 205 \begin{itemize}
206 \item{データの更新を受けたノードが一定時間ごとに, 他のノードに結果をPushする. 最新データは自分のみに書き込む.} 206 \item{データの更新を受けたノードが一定時間ごとに, 他のノードに結果をPushする. 最新データは自分のみに書き込む.}
207 \item{ノードは一定時間ごとに他のノードから更新をPullし, リクエストを受けたときは自信が保持するデータを利用する.} 207 \item{ノードは一定時間ごとに他のノードから更新をPullし, リクエストを受けたときは自信が保持するデータを利用する.}
217 \end{center} 217 \end{center}
218 \caption{変更が衝突しない場合} 218 \caption{変更が衝突しない場合}
219 \label{fig:merge_sample_success} 219 \label{fig:merge_sample_success}
220 \end{figure} 220 \end{figure}
221 221
222 この状態は衝突が発生していない, なぜならPull元が編集されていないためである. 次に図\ref{fig:merge_sample_success}について考える. 222 この状態は衝突が発生していない, なぜならPull元が編集されていないためである. 次に図\ref{fig:merge_sample_success}について考える.\\
223 この場合, お互いの異なる履歴をもつ木構造がマージされる場合で変更が衝突している. しかし, 一方の木構造に対する変更が, もう一方の木構造の編集と衝突していない. 223 この場合, お互いの異なる履歴をもつ木構造がマージされる場合で変更が衝突している. しかし, 一方の木構造に対する変更が, もう一方の木構造の編集と衝突していない.\\
224 よってこの場合は自然にマージすることが可能である. 224 よってこの場合は自然にマージすることが可能である.
225 225
226 \begin{figure}[!htbp] 226 \begin{figure}[!htbp]
227 \begin{center} 227 \begin{center}
228 \includegraphics[width=95mm]{./images/merge_sample_success.pdf} 228 \includegraphics[width=95mm]{./images/merge_sample_success.pdf}
239 \end{center} 239 \end{center}
240 \caption{変更が衝突したが, 自然に解決できない場合} 240 \caption{変更が衝突したが, 自然に解決できない場合}
241 \label{fig:merge_sample_fail} 241 \label{fig:merge_sample_fail}
242 \end{figure} 242 \end{figure}
243 243
244 衝突する場合は, マージ処理が必要である.マージ処理はお互いの変更点を検出し, 更新を自身の木構造に衝突を取り除いた状態で取り込むことである. 244 衝突する場合は, マージ処理が必要である.マージ処理はお互いの変更点を検出し, 更新を自身の木構造に衝突を取り除いた状態で取り込むことである.\\
245 分散レポジトリでは, お互いの更新点を検出する際に変更履歴を利用することで効率よくマージを実行することが出来ると考えられため, 我々のシステムでもマージの際に木構造に対しての更新履歴を参照できるようにする. 245 分散レポジトリでは, お互いの更新点を検出する際に変更履歴を利用することで効率よくマージを実行することが出来ると考えられため, 我々のシステムでもマージの際に木構造に対しての更新履歴を参照できるようにする.\\
246 マージには衝突を回避する他に, スケーラブルにするために工夫を加えることが出来る. なぜならば, 管理するコンテンツにおいて厳密なマージ処理が必要なコンテンツとそうでないコンテンツが存在するからである. 246 マージには衝突を回避する他に, スケーラブルにするために工夫を加えることが出来る. なぜならば, 管理するコンテンツにおいて厳密なマージ処理が必要なコンテンツとそうでないコンテンツが存在するからである.\\
247 そのため, 我々のシステムでは単純なマージアルゴリズムのほか, プログラマがマージアルゴリズムを記述できるようにできる仕組みを導入する. 247 そのため, 我々のシステムでは単純なマージアルゴリズムのほか, プログラマがマージアルゴリズムを記述できるようにできる仕組みを導入する.
248 248
249 \subsection{グラフデータベース} 249 \subsection{グラフデータベース}
250 グラフデータベースとはリレーショナルデータベースと異なり, グラフ構造を保存するデータベースである. 主な実装にNeo4j,OrientDB,InfiniteGraphがあるほか, TinkerPopという様々なグラフデータベースの実装の差異を吸収するためのプロジェクトも存在する. 250 グラフデータベースとはリレーショナルデータベースと異なり, グラフ構造を保存するデータベースである. 主な実装にNeo4j,OrientDB,InfiniteGraphがあるほか, TinkerPopという様々なグラフデータベースの実装の差異を吸収するためのプロジェクトも存在する.\\
251 グラフデータベースはプロパティグラフと呼ばれる種類のグラフを保持することが出来る. 主にソーシャルネットワークの人物関係を表すソーシャルグラフを表現するのに利用されるほか, ページランクのアルゴリズムにも利用される. 251 グラフデータベースはプロパティグラフと呼ばれる種類のグラフを保持することが出来る. 主にソーシャルネットワークの人物関係を表すソーシャルグラフを表現するのに利用されるほか, ページランクのアルゴリズムにも利用される.
252 252
253 \begin{figure}[!htbp] 253 \begin{figure}[!htbp]
254 \begin{center} 254 \begin{center}
255 \includegraphics[width=100mm]{./images/property_graph.pdf} 255 \includegraphics[width=100mm]{./images/property_graph.pdf}
257 \caption{プロパティグラフの例} 257 \caption{プロパティグラフの例}
258 \label{fig:property_graph} 258 \label{fig:property_graph}
259 \end{figure} 259 \end{figure}
260 260
261 \subsubsection{トラバース} 261 \subsubsection{トラバース}
262 グラフデータベースでのデータの検索方法はトラバースと呼ばれ, グラフ上を渡り歩く方法を示すことで目的のデータを取得する. 262 グラフデータベースでのデータの検索方法はトラバースと呼ばれ, グラフ上を渡り歩く方法を示すことで目的のデータを取得する.\\
263 トラバースは, 並列に効率よく行うことが可能であるためスケーラビリティに貢献できると考えられる. 以下にTinkerPopでのトラバース方法を示す. 263 トラバースは, 並列に効率よく行うことが可能であるためスケーラビリティに貢献できると考えられる. 以下にTinkerPopでのトラバース方法を示す.
264 \\ 264
265 {\bf 並列にグラフをトラバースする図} 265 \begin{lstlisting}[frame=lrbt,label=src:property_graph_traverse_tinkerpop,caption=トラバースの例,numbers=left]
266 \\ \\ 266 graph.v(1).out('knows').out('father);
267 \end{lstlisting}
268
269 \begin{figure}[!htbp]
270 \begin{center}
271 \includegraphics[width=100mm]{./images/property_graph_traverse.pdf}
272 \end{center}
273 \caption{プロパティグラフのトラバース例}
274 \end{figure}
275
267 我々のシステムでは, トラバースを木構造の検索方法として採用する. 276 我々のシステムでは, トラバースを木構造の検索方法として採用する.
268 木構造はグラフ構造の1つであるため効率よく検索を行うことができると考えられるからである. 277 木構造はグラフ構造の1つであるため効率よく検索を行うことができると考えられるからである.
278 なぜならば, 複数の結果が得られるようなトラバース例を考える. このとき,
269 279
270 \subsection{ブラウザサイドの実装} 280 \subsection{ブラウザサイドの実装}
271 近年のウェブブラウザはJavaScriptでかなり複雑な処理が可能になっている. その上, HTML5の制定によりウェブストレージやウェブソケットなどのIOまでサポートされるようになる. 281 近年のウェブブラウザはJavaScriptでかなり複雑な処理が可能になっている. その上, HTML5の制定によりウェブストレージやウェブソケットなどのIOまでサポートされるようになる.
272 以下に, HTML5で実装される主なIO関連の機能を示す. 282 以下に, HTML5で実装される主なIO関連の機能を示す.
273 \\ 283
274 {\bf HTML5で実装される機能一覧} 284 \begin{table}[!htbp]
275 \\ \\ 285 \caption{HTML5で実装される新機能}
286 \label{tab:HTML5_functions}
287 \begin{center}
288 \begin{tabular}{|c||p{25zw}|} \hline
289 名称 & 説明 \\ \hline \hline
290 WebSocket & ウェブサーバーとウェブブラウザが相互通信するための機能. \\ \hline
291 Indexed Database API & 値とオブジェクトをローカルデータベースに保存できる. \\ \hline
292 WebStorage & 値とオブジェクトの組みを保存できる, sessionStorageとlocalStorageの2種類が存在する. \\ \hline
293 App Cache & キャッシュマニフェストでブラウザのキャッシュを操作できるようになる. \\ \hline
294 \end{tabular}
295 \end{center}
296 \end{table}
297
276 通常, システムの負荷はクライアントの数に応じて増加する. 我々のシステムにおいてはクライアントはウェブブラウザに相当するため, ウェブブラウザをスケーラビリティに貢献できるようにすることでかなりの効果を期待できると考えられる. 298 通常, システムの負荷はクライアントの数に応じて増加する. 我々のシステムにおいてはクライアントはウェブブラウザに相当するため, ウェブブラウザをスケーラビリティに貢献できるようにすることでかなりの効果を期待できると考えられる.
277 299
278 \section{全体の設計} 300 \section{全体の設計}
279 提案手法を用いたシステム全体の概略図を以下に示す. 301 提案手法を用いたシステム全体の概略図を以下に示す.
280 \subsection{Push/Pullプロトコルの制定} 302
303 \begin{figure}[!htbp]
304 \begin{center}
305 \includegraphics[width=150mm]{./images/basic_architecture.pdf}
306 \end{center}
307 \caption{システム全体の概要図}
308 \label{fig:basic_architecture}
309 \end{figure}
310
311 本システムでは, データ構造として木構造を採用する. 各サーバー・クライアントはそれぞれ木構造が保存されており, サーバーはサーバー同士で木構造のpush/pullを行い, クライアントはサーバーと木構造のpush/pullを行う.
312 前述した, スケーラブルにする方法,
313
314