comparison shoshi-paper.tex @ 6:bd7d39a4e57f

correct spellmiss,wordiness,etc...
author Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
date Mon, 08 Aug 2011 21:58:05 +0900
parents bb4327f3c4c4
children
comparison
equal deleted inserted replaced
5:bb4327f3c4c4 6:bd7d39a4e57f
63 % 行頭の間隔は使わない 63 % 行頭の間隔は使わない
64 % 段落は1行空ける 64 % 段落は1行空ける
65 % 65 %
66 % 和文アブストラクト 66 % 和文アブストラクト
67 \Jabstract{% 67 \Jabstract{%
68 本研究では, スケーラビリティのあるCMSを開発するために, PCクラスタを利用したスケーラビリティの検証環境を構築し, ロックフリーな木構造である非破壊的木構造・多段キャッシュ・Cassandraを用いた設計と実装を行って来た. 今回は, 実装したシステムのスケーラビリティを検証するため, 構築したスケーラビリティの検証環境を用いてベンチマークを取り, スケーラビリティがあるか確認するために, 環境構築を行った. また, 非破壊的木構造をバランス木に応用し, バランス木の性能であるO(log N)を保ちつつ並列に読み・書き込みが可能である辞書アルゴリズムの提案をする. 68 本研究では, スケーラビリティのあるCMSを開発するために, PCクラスタを利用したスケーラビリティの検証環境を構築し, ロックフリーな木構造である非破壊的木構造・多段キャッシュ・Cassandraを用いた設計と実装を行って来た.
69 今回は, 実装したシステムのスケーラビリティを検証するため, 構築した検証環境を用いてベンチマークを取り, スケーラビリティがあるか確認するために, 環境構築を行った.
70 また, 非破壊的木構造をバランス木に応用し, バランス木の性能であるO(log N)を保ちつつ並列に読み・書き込みが可能である辞書アルゴリズムの提案をする.
69 } 71 }
70 % 72 %
71 % 英文アブストラクト(大会論文には必要なし) 73 % 英文アブストラクト(大会論文には必要なし)
72 % \Eabstract{} 74 % \Eabstract{}
73 % 75 %
74 \maketitle 76 \maketitle
75 77
76 \section{はじめに} 78 \section{はじめに}
77 Cassandraは複数のサーバーで動作を想定した分散デデータベースある. 本研究は, Cassandraの検証と非破壊的木構造を用いたスケーラビリティのあるCMSの設計と開発を行った. 79 Cassandraは複数のサーバーで動作を想定した分散デデータベースある. Cassandraは, FaceBookが自社のために開発した分散Key-Valueストアデータベースであり, Dynamo\cite{DYNAMO}とBigTable\cite{BIGTABLE}を合わせた特徴を持っている.
80 2008年にオープンソースとして公開され, 2009年にApache Incubatorのプロジェクトとなり,現在でも頻繁にバージョンアップが行われている. 本研究は, Cassandraの検証と非破壊的木構造を用いたスケーラビリティのあるCMSの設計と開発を行った.
78 非破壊的木構造を用いたCMSのとは, 木構造で表すことの出来るコンテンツを編集する際に, 編集元の木構造を破壊することなく編集するアルゴリズムである. これを利用してCassandra上に非破壊的木構造を構築しCMSを実装することができた. 81 非破壊的木構造を用いたCMSのとは, 木構造で表すことの出来るコンテンツを編集する際に, 編集元の木構造を破壊することなく編集するアルゴリズムである. これを利用してCassandra上に非破壊的木構造を構築しCMSを実装することができた.
79
80 本研究では, 開発したCMSのスケーラビリティの検証を行うため, 仮想環境を用いた検証環境の構築と管理ソフトウェアを開発した. 82 本研究では, 開発したCMSのスケーラビリティの検証を行うため, 仮想環境を用いた検証環境の構築と管理ソフトウェアを開発した.
81 \section{分散データベースCassandra}
82 Cassandraは, FaceBookが自社のために開発した分散Key-Valueストアデータベースであり, Dynamo\cite{DYNAMO}とBigTable\cite{BIGTABLE}を合わせた特徴を持っている. 2008年にオープンソースとして公開され, 2009年にApache Incubatorのプロジェクトとなった.
83 2010年にはApacheのトップレベルプロジェクトとなり, 現在でも頻繁にバージョンアップが行われている.
84 83
85 \section{非破壊的木構造} 84 \section{非破壊的木構造}
86 非破壊的木構造とは, 木構造を編集する際に編集元の木構造を破壊することなく, 新しく木構造を構築する. 新しい木構造のルートノードを置き換えることにより編集する方法である. 85 非破壊的木構造は, 木構造を編集する際に編集元の木構造を破壊することなく, 新しく木構造を構築する. 新しい木構造のルートノードを置き換えることにより編集する方法である.
87 非破壊的に変更することで, 編集元の破壊することなく編集することが出来るため, 木構造の整合性を保ちつつ変更することが可能になる. 86 非破壊的に変更することで, 編集元の木構造を破壊することなく編集することが出来るため, 木構造の整合性を保ちつつ変更することが可能になる. \\
88 \subsection{木構造の破壊的変更}
89 従来の破壊的木構造は, 存在する木構造を書き換えて編集する. 以下の様な操作を行う. 87 従来の破壊的木構造は, 存在する木構造を書き換えて編集する. 以下の様な操作を行う.
90 \begin{figure}[!htbp] 88 \begin{figure}[!htbp]
91 \begin{center} 89 \begin{center}
92 \includegraphics[scale=0.5]{dest-tree1.pdf} 90 \includegraphics[scale=0.5]{dest-tree1.pdf}
93 \end{center} 91 \end{center}
94 \caption{木構造の破壊的変更例} 92 \caption{木構造の破壊的変更例}
95 \label{fig:dest-tree1} 93 \label{fig:dest-tree1}
96 \end{figure} 94 \end{figure}
97 95 図\ref{fig:dest-tree1}の操作では, ノード$F$の内容をノード$G$に書き換える操作を行った. 破壊的変更では, 単純に編集したいノードを書き換えることにより行われる. この操作では, 編集時に木を参照している処理がある場合, 参照されている木構造を破壊するため, 参照を開始した時点での木構造の整合性が破壊されるという問題が起きる.
98 図\ref{fig:dest-tree1}の操作では, ノード$F$の内容をノード$G$に書き換える操作を行った. 破壊的変更では, 単純に編集したいノードを書き換えることにより行われる. この操作では, 編集時に木を参照している処理がある場合, 参照されている木構造を破壊するため, 参照を開始した自転での木構造の整合性が破壊されるという問題が起きる.
99 \begin{figure}[!htbp] 96 \begin{figure}[!htbp]
100 \begin{center} 97 \begin{center}
101 \includegraphics[scale=0.4]{dest-tree2.pdf} 98 \includegraphics[scale=0.4]{dest-tree2.pdf}
102 \end{center} 99 \end{center}
103 \caption{破壊的変更の問題点} 100 \caption{破壊的変更の問題点}
104 \label{fig:dest-tree2} 101 \label{fig:dest-tree2}
105 \end{figure} 102 \end{figure}
106 この問題を解決するためには, 木構造の操作に排他制御を取り入れてロックする必要がある. しかし, その方法ではスケーラビリティを確保できるとは考えられないため, 非破壊的な変更を方法を用いて木構造を編集する. 103 この問題を解決するためには, 木構造の操作に排他制御を取り入れてロックする必要がある. しかし, その方法ではスケーラビリティを確保できるとは考えられないため, 非破壊的な変更を用いて木構造を編集する. \\
107 \subsection{木構造の非破壊的変更}
108 木構造の非破壊的な変更は, 編集元の木構造を破壊せずに編集を行う, 編集の様子を図\ref{fig:mono-tree1}に示す. 図\ref{fig:mono-tree1}では図\ref{fig:dest-tree1}と同様にノード$F$の内容をノード$G$に書き換える処理を行っている. 104 木構造の非破壊的な変更は, 編集元の木構造を破壊せずに編集を行う, 編集の様子を図\ref{fig:mono-tree1}に示す. 図\ref{fig:mono-tree1}では図\ref{fig:dest-tree1}と同様にノード$F$の内容をノード$G$に書き換える処理を行っている.
109 105
110 \begin{figure}[!htbp] 106 \begin{figure}[!htbp]
111 \begin{center} 107 \begin{center}
112 \includegraphics[scale=0.4]{mono-tree1.pdf} 108 \includegraphics[scale=0.4]{mono-tree1.pdf}
120 \item{ルートノードであるノード$A$から編集対象であるノード$F$までのパスをコピーする. (ノード$A,C,F$をコピーする)} 116 \item{ルートノードであるノード$A$から編集対象であるノード$F$までのパスをコピーする. (ノード$A,C,F$をコピーする)}
121 \item{パスに含まれないノードは編集元のノードと共有する. (コピーノード$A$からノード$B$へリンクを作成する)} 117 \item{パスに含まれないノードは編集元のノードと共有する. (コピーノード$A$からノード$B$へリンクを作成する)}
122 \item{編集対象であるノード$F$は編集せず, コピーしたノード$F$をノード$G$へと編集する. } 118 \item{編集対象であるノード$F$は編集せず, コピーしたノード$F$をノード$G$へと編集する. }
123 \item{木構造のルートノードをノード$A$からコピーしたノード$A$へと置き換える. } 119 \item{木構造のルートノードをノード$A$からコピーしたノード$A$へと置き換える. }
124 \end{enumerate} 120 \end{enumerate}
125 この手順では, 元の木構造は破壊されることは無い, そのため木の閲覧者が存在していても閲覧している木構造の整合性が破壊されることはない. 121 この手順では, 元の木構造は破壊されることは無く, 木の閲覧者が存在していても閲覧している木構造の整合性が破壊されることはない.
126 よって, 並列に読み書きを行うことが出来る. 122 よって, 並列に読み書きを行うことが出来る.
127 123
128 \subsection{応用例:非破壊的木構造を用いた二分木辞書} 124 \section{非破壊的木構造を用いた二分木辞書}
129 125
130 この方法の応用例として非破壊的木構造とバランス木を用いた二分木辞書を考えることが出来る. 二分木辞書とは二分探索を用いたO(lg n)を保証する辞書アルゴリズムである. 二分木辞書では, バランスのとれた木構造を維持するためにバランス木のアルゴリズムを利用する. 126 この方法の応用例として非破壊的木構造とバランス木を用いた二分木辞書を考えることが出来る. 二分木辞書とは二分探索を用いたO(lg n)を保証する辞書アルゴリズムである. 二分木辞書では, バランスのとれた木構造を維持するためにバランス木のアルゴリズムを利用する.
131 これらのアルゴリズムと非破壊的木構造を組み合わせることにより, 並列に読み書きを行うことが出来る辞書を作成することが出来る. 127 これらのアルゴリズムと非破壊的木構造を組み合わせることにより, 並列に読み書きを行うことが出来る辞書を作成することが出来る.
132 また, この辞書アルゴリズムの利点として辞書全体のコピーにかかる計算量がO(1)で済むことも利点の一つである. 128 また, この辞書アルゴリズムの利点として辞書全体のコピーにかかる計算量がO(1)で済むことも利点の一つである.
133 \subsubsection{AVL-Treeを用いた非破壊的二分木辞書} 129 \subsection{AVL-Treeを用いた非破壊的二分木辞書}
134 130
135 実装例として, AVL-Treeを用いた非破壊的二分木辞書を紹介する. この辞書は読み書きがO(lg n)かつ辞書の複製のコストがO(1)で有ることを保証する. 131 実装例として, AVL-Treeを用いた非破壊的二分木辞書を紹介する. この辞書は読み書きがO(lg n)かつ辞書の複製のコストがO(1)で有ることを保証する.
136 \begin{enumerate} 132 \begin{enumerate}
137 \item{辞書の読み込み} 133 \item{辞書の読み込み}
138 134
139 非破壊二分木辞書の読み込みは通常の二分木と同様で, ルートノードよりキーの大小関係を比較し値を検索する. そのため, 省略する. 135 非破壊二分木辞書の読み込みは通常の二分木と同様で, ルートノードよりキーの大小関係を比較し値を検索する.
140 キーを検索する際に, 二分木辞書で使われている木構造は破壊されることがないため, 並列に行うことが出来き, スレッドセーフである. 136 キーを検索する際に, 二分木辞書で使われている木構造は破壊されることがないため, 並列に行うことが出来き, スレッドセーフである.
141 \item{辞書の書き込み} 137 \item{辞書の書き込み}
142 138
143 非破壊辞書の書き込みは以下の手順で行われる. 139 非破壊辞書の書き込みは以下の手順で行われる.
144 \begin{enumerate} 140 \begin{enumerate}
149 \end{center} 145 \end{center}
150 \caption{手順1:ノードのコピーと書き込み} 146 \caption{手順1:ノードのコピーと書き込み}
151 \label{fig:mono-dic1} 147 \label{fig:mono-dic1}
152 \end{figure} 148 \end{figure}
153 149
154 この例では, 木構造に新しくノード$7$を追加する. そのため, 編集元の二分木より$50,25,15$のノードをコピーする. 他の影響のない$100,35$は共有する. 150 図\ref{fig:mono-dic1}では, 木構造に新しくノード$7$を追加する. そのため, 編集元の二分木より$50,25,15$のノードをコピーする. 他の影響のない$100,35$は共有する.
155 \item{ローカルにコピーしたノードを編集し, 書き込みむ} 151 \item{ローカルにコピーしたノードを編集し, 書き込みむ}
156 152
157 次に, コピーした木構造を編集し書き込みを行う. 図\ref{fig:mono-dic1}の例ではノード$15$の右部分に新しくノード$7$を追加する. 153 次に, コピーした木構造を編集し書き込みを行う. 図\ref{fig:mono-dic1}の例ではノード$15$の右部分に新しくノード$7$を追加する.
158 \item{コピーし編集したノードよりルートノードまでを走査し, 木の回転が必要な場合は回転させる. } 154 \item{コピーし編集したノードよりルートノードまでを走査し, 木の回転が必要な場合は回転させる. }
159 \begin{figure}[!htbp] 155 \begin{figure}[!htbp]
177 \end{enumerate} 173 \end{enumerate}
178 \item{辞書のコピー} 174 \item{辞書のコピー}
179 175
180 非破壊辞書のコピーは, 単にルートノードを共有するだけで行うことが出来る. 木構造は破壊されないため, 元の木構造は不変である. 共有した木構造を元にローカル新しい木構造を作成していくため, 問題は起きない. よって, この場合の計算量は定数でありO(1)である. 176 非破壊辞書のコピーは, 単にルートノードを共有するだけで行うことが出来る. 木構造は破壊されないため, 元の木構造は不変である. 共有した木構造を元にローカル新しい木構造を作成していくため, 問題は起きない. よって, この場合の計算量は定数でありO(1)である.
181 \end{enumerate} 177 \end{enumerate}
182 この二分木辞書は主に, 辞書をコピーするときに効果を発揮する. 178 この二分木辞書は主に, 辞書をコピーするときに効果を発揮する. 本研究で開発した非破壊的構造を用いたCMSでは, 木構造を編集する際に, ノードの持つ属性を同時にコピーする.
179 本来は単純な辞書のコピーで合ったが, これを非破壊的二分木辞書を利用することで改善することが出来るのではないかと考えられる.
183 180
184 \section{非破壊的木構造を用いたCMS} 181 \section{非破壊的木構造を用いたCMS}
185 182
186 本研究では, 非破壊木構造を用いてスケーラビリティのあるCMSの設計と実装を行った. \cite{SHOSHI2}本システムではコンテンツを木構造で表現する. Cassandra上に木構造を構築し, それを非破壊的に編集する. 図\ref{fig:tree-cms1}に概略図を示す. 183 本研究では, 非破壊木構造を用いてスケーラビリティのあるCMSの設計と実装を行った. \cite{SHOSHI2}本システムではコンテンツを木構造で表現する. Cassandra上に木構造を構築し, それを非破壊的に編集する. 図\ref{fig:tree-cms1}に概略図を示す.
187 \begin{figure}[!htbp] 184 \begin{figure}[!htbp]
208 \end{center} 205 \end{center}
209 \caption{多段キャッシュとマージ処理} 206 \caption{多段キャッシュとマージ処理}
210 \label{fig:tree-cms3} 207 \label{fig:tree-cms3}
211 \end{figure} 208 \end{figure}
212 \section{検証環境の構築} 209 \section{検証環境の構築}
213 検証では, 前回用いたPCクラスタがシステム更新のために使用不可になってしまったため, 新しく導入されたブレードサーバーによる仮想環境において検証環境を構築する. \cite{SHOSHI1} 210 検証では, 新しく導入されたブレードサーバーによる仮想環境において検証環境を構築する. \cite{SHOSHI1}
214 仮想環境のホストとして利用するサーバーを表\ref{tab:bldsv-info}に示す. 211 仮想環境のホストとして利用するサーバーを表\ref{tab:bldsv-info}に示す.
215 \begin{table}[!htbp] 212 \begin{table}[!htbp]
216 \caption{検証環境に用意したサーバー} 213 \caption{検証環境に用意したサーバー}
217 \label{tab:bldsv-info} 214 \label{tab:bldsv-info}
218 \begin{center} 215 \begin{center}
228 \subsection{仮想環境} 225 \subsection{仮想環境}
229 仮想化とは1つの物理マシン上にて複数のオペレーティングシステムを動作させる技術である. 物理マシンにハイパーバイザと呼ばれる物理マシンのリソースを仮想化するレイヤを追加する. 226 仮想化とは1つの物理マシン上にて複数のオペレーティングシステムを動作させる技術である. 物理マシンにハイパーバイザと呼ばれる物理マシンのリソースを仮想化するレイヤを追加する.
230 ハイパーバイザは仮想マシンを作成し仮想化したリソースを仮想マシンに提供する. その上でオペレーティングシステムを動作させることで, 複数のオペレーティングシステムの稼働を可能にする. 227 ハイパーバイザは仮想マシンを作成し仮想化したリソースを仮想マシンに提供する. その上でオペレーティングシステムを動作させることで, 複数のオペレーティングシステムの稼働を可能にする.
231 ハイパーバイザは複数ありVMWare,KVM,Xen,Hyper-Vなどがあげられる. 本検証では, KVMとVMWareを用いた検証を行う予定である. 228 ハイパーバイザは複数ありVMWare,KVM,Xen,Hyper-Vなどがあげられる. 本検証では, KVMとVMWareを用いた検証を行う予定である.
232 \subsection{仮想環境を用いた検証方法の検討} 229 \subsection{仮想環境を用いた検証方法の検討}
233 仮想環境を用いた検証方法は基本的に前回のPCクラスタを用いたスケーラビリティ検証と同様の方法を採用する. (図\ref{fig:bench-method1}) 230 仮想環境を用いた検証方法は基本的に前回\cite{SHOSHI1}のPCクラスタを用いたスケーラビリティ検証と同様の方法を採用する. (図\ref{fig:bench-method1})
234 つまり, 並列アクセス用のクライアントクラスタとサーバー用のクラスタを用意する. 今回は, server01-03をクライアントクラスタ用の仮想環境に, server04をサーバークラスタ用の仮想環境として用いる. 231 つまり, 並列アクセス用のクライアントクラスタとサーバー用のクラスタを用意する. 今回は, server01-03をクライアントクラスタ用の仮想環境に, server04をサーバークラスタ用の仮想環境として用いる.
235 \begin{figure}[!htbp] 232 \begin{figure}[!htbp]
236 \begin{center} 233 \begin{center}
237 \includegraphics[scale=0.35]{bench-method1.pdf} 234 \includegraphics[scale=0.35]{bench-method1.pdf}
238 \end{center} 235 \end{center}
255 そこで, 本研究では初めに仮想環境を管理するツールを開発し, 検証環境の構築に利用する. 252 そこで, 本研究では初めに仮想環境を管理するツールを開発し, 検証環境の構築に利用する.
256 \subsubsection{libvirt} 253 \subsubsection{libvirt}
257 libvirtとは, 複数ある仮想環境においてノードをリモートより共通で十分に安全な安定した管理方法を提供するライブラリである. この場合のノードは1台の物理的なマシンであり, ドメインは仮想マシンを指す. 254 libvirtとは, 複数ある仮想環境においてノードをリモートより共通で十分に安全な安定した管理方法を提供するライブラリである. この場合のノードは1台の物理的なマシンであり, ドメインは仮想マシンを指す.
258 様々な言語とハイパーバイザ, ユーザーの認証方法に対応している. 255 様々な言語とハイパーバイザ, ユーザーの認証方法に対応している.
259 \begin{enumerate} 256 \begin{enumerate}
260 \item{ハイパーバイザ} 257 \item{ハイパーバイザ}\\
261 KVM,Xen,VirtualBox,VMWare,etc.. 258 KVM,Xen,VirtualBox,VMWare,etc..
262 \item{プログラミング言語} 259 \item{プログラミング言語}\\
263 C,Python,C\#,Java,Perl,Ruby,PHP,etc.. 260 C,Python,C\#,Java,Perl,Ruby,PHP,etc..
264 \end{enumerate} 261 \end{enumerate}
265 libvirtを用いた仮想化管理ツールは複数存在している, 以下にその一例を示す. 262 libvirtを用いた仮想化管理ツールは複数存在している, 以下にその一例を示す.
266 \begin{table}[!htbp] 263 \begin{table}[!htbp]
267 \caption{libvirtを用いた管理ツール} 264 \caption{libvirtを用いた管理ツール}
268 \begin{center} 265 \begin{center}
269 \begin{tabular}{|c|c|} \hline 266 \begin{tabular}{|c|c|} \hline
270 virsh & CUI \\ \hline 267 virsh & CUI \\ \hline
271 virt-manager & GUI \\ \hline 268 virt-manager & GUI \\ \hline
272 oVirt & Web \\ \hline 269 oVirt,AbiCloud,etc... & Web \\ \hline
273 \end{tabular} 270 \end{tabular}
274 \end{center} 271 \end{center}
275 \end{table} 272 \end{table}
276 {\tt libvirt}を用いた管理ツールは複数存在するが, インストールが複雑であり, 必要のない機能を実装してることが多い. そこで, 導入が用意であり, かつ十分な機能を提供するウェブ上の管理ツールを実装する. 273 {\tt libvirt}を用いた管理ツールは複数存在するが, インストールが複雑であり, 必要のない機能を実装してることが多い. そこで, 導入が用意であり, かつ十分な機能を提供するウェブ上の管理ツールを実装する.
277 \subsubsection{webvirt} 274 \subsubsection{webvirt}
285 \item{ストレージプールの管理} 282 \item{ストレージプールの管理}
286 \item{ネットワークの管理} 283 \item{ネットワークの管理}
287 \end{itemize} 284 \end{itemize}
288 また, シングルノードのみを管理する目的で開発されているため, ライブマイグレーションなどの機能は実装していない. 285 また, シングルノードのみを管理する目的で開発されているため, ライブマイグレーションなどの機能は実装していない.
289 \section{まとめ} 286 \section{まとめ}
290 本研究では, 構築した非破壊的構造を用いたCMSのスケーラビリティ検証環境を構築するために, ウェブ上の管理ツールであるwebvirtの実装を行った. また, 非破壊的構造の応用例として並列に読み書きを行うことの出来るバランス木を用いた二分木辞書の実装例を示した. 287 本研究では, 開発した非破壊的構造を用いたCMSのスケーラビリティ検証を行うため, 仮想環境における検証環境の構築方法について検討した.
291 次回は, 構築した仮想環境によるスケーラビリティの検証を行う予定である. 288 基本的な方法は前回\cite{SHOSHI1}と同様に行い, クライアントクラスタとサーバークラスタの仮想環境を構築する必要がある.
289 仮想環境下では, 仮想マシンによる物理リソースの取り合いを防ぐため, 仮想マシンのリソースを予約・制限しつつ構築する必要があることが分かった. 仮想マシンは複数存在するため管理が困難だと考えられ,ウェブ上の管理用ツールを開発した.
290 また, 非破壊的構造の応用例として並列に読み書きを行うことの出来るバランス木を用いた二分木辞書の実装例を示した. 次回は, 構築した仮想環境によるスケーラビリティの検証を行う予定である.
292 291
293 \begin{adjustvboxheight} % needed only when Appendix follows 292 \begin{adjustvboxheight} % needed only when Appendix follows
294 \begin{thebibliography}{99} 293 \begin{thebibliography}{99}
295 \bibitem{BIGTABLE}{Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach 294 \bibitem{BIGTABLE}{Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach
296 Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber}: Bigtable : A Distributed Storege System for Structured Data 295 Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber}: Bigtable : A Distributed Storege System for Structured Data