強い一貫性
NoSQLデータベースにはデータの一貫性についてさまざまなタイプの製品が存在します。HBaseは強い一貫性をもつシステムです。ここで言う強い一貫性とは、あるデータの書き込みがあった時に、それ以降の読み出しでは必ず書き込んだデータが読めることをシステム全体で保証することを指しています。
強い一貫性ではなく、結果整合性モデルに基づく他のNoSQLでは、あるデータの書き込み完了後でも、その後の読み込みで古いデータを読んでしまう場合があります。また、障害発生時のデータの復旧プロセスがより複雑になるため、厳密な計算が求められるような業務システムにはそのようなNoSQLデータベースは利用できません。その点で、HBaseはよりエンタープライズ用途に適していると言えます。
自動フェールオーバーによる高可用性
HBaseは高可用性を持つ分散システムです。クラスタ内いずれかのノードに障害が発生してアクセスができなくなったとしても、クラスタ全体のサービスが停止してしまうことはありません。障害が発生すると自動的に機能がフェールオーバーされ、クラスタにアクセスするHBaseのクライアント側では特別に対応する必要はありません。
以前はHDFSに単一障害点が存在していたためHBaseもその影響を受けましたが、現在ではHDFSも高可用性構成に対応しているため単一障害点は存在しません。
シンプルなAPI
前述の通り、HBaseのデータモデルはRDBMSとは根本的に異なっています。HBaseに対するデータ操作のAPIは非常にシンプルなものしか用意されていません。基本的には、特定行の値を取得する「Get」、特定行の値を更新する「Put」、特定範囲の複数行から条件に合う値を取り出す「Scan」を使用してデータを操作します。
また、格納される値は単純なバイト列ですので、アプリケーション側でデータを解釈する必要があります。これは高い性能とスケーラビリティを実現するために意図的に設計上取捨選択した結果ですが、利用者はこれを考慮してデータ設計や用途を見極める必要があります。
Hadoopとの親和性
HBaseはHadoopクラスタ上に構築され、データはHDFSに格納されます。格納されたデータはHDFSの仕組みにでレプリケーションされ、データの冗長性が確保されています。このため、HBaseの利用にはHadoopのクラスタの構築、運用のノウハウも求められます。
一方、Hadoop上に構築されているということは、同一のクラスタ上でHadoopの豊富なエコシステムプロジェクトを活用できるということでもあります。例えば、HBaseに対するデータの一括ローディングを効率的に行うために、MapReduceジョブを使って並列にデータを加工、格納することが可能です。HBaseに対して「Hive」や「Pig」からそれぞれのクエリ言語を使用してアクセスすることもできます。
どのようなときにHBaseを使うとよいか
基本的に、HBaseの想定する利用アプリケーションやユーザーはRDBMSとは重複していません。もしかすると、これまで無理にもしくは非効率的にRDBMSを使っていた用途で、HBaseをはじめとするNoSQLデータベースに置き換えることで大きなメリットを得られる場合もあるかもしれませんが、HBaseが本来の能力を発揮するのは業務利用としては比較的新しい分野でしょう。
では、HBaseを使うべきシーンをどのように判断すればよいでしょうか。いくつかの重要な要素がありますが、主なものを取り上げます。
データ量と投入レート
今後データ量の急激な増大が予測されるのは、マシンが自動的に生み出すデータです。具体的には、多様なIoT(Internet of Things、モノのインターネット)の端末が生成するセンサデータ、マシンやネットワークを行き交うトラフィックの詳細なメトリクスのログデータなどです。
これらのデータの特徴は、まずデータ量が圧倒的に多いこと、そしてデータ投入のレートが非常に高いことです。これらのデータの取り扱いは、従来のRDBMSではスケーラビリティとコスト効率性の面で困難を伴います。HBaseは安定した高い書き込み性能を備えるため、これらのデータフローの受け皿として適しています。