Greenplum DBの柔軟な拡張の選択肢
この状況を変えることができるシステム基盤として注目されているのが、シェアードナッシングMPP (Massive Parallel Processing)アークテクチャをベースとするデータベース製品です。シェアードナッシングアーキテクチャのシステムでは、処理ノードの追加により、データ格納容量と処理性能が台数に比例して伸びて行くため、急激なデータの増大にも応えることができます。また、このようなハードウェアリソースの拡張はデータベースの処理エンジンにより隠蔽され、アプリケーションのレベルではデータの格納場所や処理を行うノード数といったことは意識させないため、処理ロジックの変更も必要ありません。
さらに、システムの性能向上のアプローチも変わってきます。必要な性能が出ない場合にはSQLの最適化やインデックスなどのデータベースのチューニングテクニックにより性能改善を試みるのが一般的ですが、この方法はデータベース技術者の技量にも依存しますし、最適化が深くなればなるほど適用範囲が狭まっていき、少しの設計変更で意味をなさなくなるというジレンマが発生します。シェアードナッシングアーキテクチャでは、このような人的コストがかかるやり方から、単純なハードウェアリソースの追加による性能改善のやり方への移行を促進します。
Greenplum DBはシェアードナッシングMPPアーキテクチャの代表的なデータベース製品ですが、大きな特徴の一つは汎用ハードウェアで動作するソフトウェア製品というところです。Linux/Solarisが動作するx86ベースのサーバであればメーカーや製品を選ばず、ネットワークも標準的なEthernetで構成することが可能です。これにより、初期導入時にデータ量が非常に少ない場合でも、最小構成(例えばマスターサーバ1台+セグメントサーバ2台)を非常に低コストで構築することができます。そしてデータ量が増えてきた段階で、サーバ/ストレージ1台単位でシステムを拡張して行くことが可能です。
処理ノードであるセグメントサーバを新たに追加する場合に必要な手順はシンプルです。まず新規にOSおよびGreenplum DBのソフトウェアをインストールした後に、サーバ追加後のシステム構成を記述した構成ファイルを用意し、拡張のためのコマンドgpexpandを実行してシステムを再構成します。これでシステムのセグメントサーバ数の拡張は完了していますが、まだ新規に追加したサーバには何もデータが格納されていません。続けて、データを再分散してシステム全体に配置するためのオプションをつけてgpexpandをもう一度実行します。そうするとバックグラウンドでデータ転送を行うプロセスが起動し、あらかじめ設定された分散ポリシーに従ってデータの再分散が行われます。
上記の拡張はシステムを停止することなくオンラインで実行できるので、システムを利用している業務への影響は最小限で済みます。再分散の処理はシステムにI/O負荷をかけますが、再分散のバックグラウンド処理を稼働させる時間を指定できますので、影響の少ない時間帯を選んで処理させることも可能です。