シェアードナッシング型の弱点を克服したGreenplum
DWHにおける検索高速化のアプローチとして、古くから実績のあるアーキテクチャにシェアードナッシングがある。
シェアードナッシングとは、簡単に言うと、ディスクをサーバーノードごとに割り当て、複数ノードで分散処理による高速検索処理を実現するというものだ。処理を分散させることで、大量データに対する全件検索のような処理も、並列化して高速処理できる。データが増えた場合にも、ノードを追加しスケールアウト型の拡張性の確保も簡単だ。
とはいえ、このシェアードナッシング型にも弱点はある。その1つがローディングにかかる時間だ。並列処理をより効率化するには、データをたくさんのストレージに、均等に分ける必要がある。この均等に分けるというのがポイントで、それにより特定ノードへの処理集中というボトルネックの解消が可能となる。逆に言えば、性能を発揮するには、データを細かく均等に分けてノードに分散させる必要があるのだ。
「通常、シェアードナッシング型のアーキテクチャでは、マスターサーバーでハッシュ関数などを用い、データを各ノードに分散させてロードします。ノード数が少なければあまり問題にはならないかもしれませんが、100ノードとかになると、このハッシュ分散の処理にかなりの時間がかかることになります」
と語るのは、EMCジャパン データ・コンピューティング事業本部 テクノロジー & プロフェッショナルサービス部 部長の仲田 聰氏。
仲田氏によれば、シェアードナッシング型のアーキテクチャでは、通常はマスターサーバー経由でデータをロードすることになり、マスターサーバーにデータ分散の処理が集中してしまう。そのせいで莫大なデータのロードには、かなりの時間がかかるという。
これは、データ量が少ないときにはあまり問題にならない。しかし、現状のように企業の扱うデータ量が爆発的に増えている状況では、かなり問題だ。ローディングにあまりにも時間がかかれば、DWHに入れるデータ量を減らすために明細レベルは諦め、集計した結果データを入れることになる。そうなると、分析時には情報の概要までしか分からず、詳細に当たろうとすると別途明細データにアクセスする仕組みを提供しなければならないかもしれない。当然これでは、タイムリーな分析もできないし、結果の正確性も担保できないだろう。
これに対しGreenplumでは、マスターサーバーが分散処理を一手に引き受けるのではなく、ノードのセグメントサーバーそれぞれで分散の処理をしながらロードが行える。そのため、マスターサーバー処理のボトルネックが発生しないのだ。
「どのデータをどのセグメントサーバーが持つのかを、それぞれが知っているのです。この方法ならば、データソースを増やすことも容易で、さらなる高速な分散処理も可能になります」(仲田氏)
一連のデータロードの仕組みはパテント申請中の技術であり、他社はなかなか追随できないだろうとのことだ。