# HG changeset patch # User Daichi TOMA # Date 1374178661 -32400 # Node ID d968105de038ba41e8c7b74b04ecb40f96f63ff0 # Parent 70a3ea154c0b1c565d1120a6c7cad7a7e30a0b60 change some expression diff -r 70a3ea154c0b -r d968105de038 Paper/jssst.tex --- a/Paper/jssst.tex Thu Jul 18 19:35:57 2013 +0900 +++ b/Paper/jssst.tex Fri Jul 19 05:17:41 2013 +0900 @@ -154,7 +154,7 @@ \section{コンテンツマネージメントシステムの設計} コンテンツマネージメントシステムのデータ構造としては木構造を用いる。 -また、スケーラビリティのある CMS の実現のために非破壊的木構造\cite{shoshi:2011a}を採用する。 +我々は、スケーラビリティのある CMS の実現のために非破壊的木構造\cite{shoshi:2011a}を提案する。 非破壊的木構造とは、編集元の木構造を破壊することなく新しい木構造を構成することで木構造を編集する方法である。 破壊的木構造と異なりロックせずに並列に読むことができるため、自由にコピーを作成することが可能である。 @@ -242,7 +242,7 @@ \paragraph*{木の作成} はじめに、データベースオブジェクトと木の作成方法について述べる。 Jungle は複数の木を保持することができる。 -木には名前がついており、名前を利用して作成・編集・削除を行うことができる。\\ +木には名前がついており、名前を利用して作成・編集・削除を行うことができる。 \begin{lstlisting}[label=new_jung, caption=データベースオブジェクトと木の作成] jungle = createJungle @@ -280,10 +280,10 @@ State モナドを用いて記述を簡易にしたものもあるが、利用者にどのようなAPIを提供するかは検討中である。 \subsection{実装の詳細} -\paragraph*{Treeの取り扱い} -Jungle の Tree の取り扱いには、Haskell の Map を用いている。 +\paragraph*{木の取り扱い} +Jungle の 木 の取り扱いには、Haskell の Map を用いている。 Mapは、平衡木を使った Haskell の連想リストである。 -連想リストを用いて、木の名前と Tree 自体を結びつけている。 +連想リストを用いて、名前と木を結びつけている。 \paragraph*{データ構造} 木のデータ構造は、データ型で定義されている。 @@ -303,6 +303,12 @@ 非破壊的木構造であっても、どのノードが最新のルートノードなのかという情報が必要である。 スレッドセーフに取り扱う必要があるため、Haskell のソフトウェア・トランザクショナル・メモリを用いて管理している。 +\subsection{開発期間} +関数型プログラミングでは、コードは短く簡潔になり、生産性が向上する。 + +Java 版の Jungle の実装と比較すると、コード行数は約3000行から約150行へ短くなった。 +またJava版の実装には 3 ヶ月程度かかったが、Haskell 版の実装は 2 週間程度しかかからなかった。 + \section{木構造データベース Jungle を用いた CMS の検証} 木構造データベース Jungle 及び Warp を用いて簡単な掲示板ウェブアプリケーションを作成した。 同様のウェブアプリケーションを、Java による Jungle 実装 及び Cassandra\cite{cassandra} 上でも動かし性能比較を行う。 @@ -405,16 +411,17 @@ \label{fig:delay} \end{figure} -急に実行時間が下がっている点が3箇所あるが、手動で掲示板の表示を挟んだ箇所である。 -数万回以上の書き込みを処理するため、書き込みが積まれている状態ではじめて掲示板を表示する際は数秒かかる。 -書き込みは、インクリメントしている値を書き込んでいるが順序などは正しく処理されている。 +実行時に書き込みだけではなく、一定間隔に一度読み込みを挟むようにした。 +書き込みを繰り返すと実行時間が悪化し、読み込み後、急激に実行時間が下がる。 +読み込みの際には、数万回以上の書き込みを処理するため数秒かかる。 +書き込みは、インクリメントしている値を書き込んでいるが順序などは正しく処理できている。 -この問題を解決するために、全て遅延評価するのではなく正格評価を挟むことで領域効率を向上する必要がある。 +この問題を解決するために、全て遅延評価するのではなく適切な箇所で正格評価を行うことで領域効率を改善する必要がある。 \subsection{並列処理} Haskell 版 Jungle では、並列実行に問題を抱えている。 -並列に動かすことは可能だが、シングルコアで実行した場合と比較して実行結果が遅くなる。 +複数のスレッドが立ち上がり、並列実行していることは確認したが、シングルコアで実行した場合と比較して実行結果が遅くなる。 図\ref{fig:read}や図\ref{fig:write}の結果では、Haskell版はシングルコアで実行している。 並列に動かした場合の実験結果を図\ref{fig:para}に示す。