はじめに
今回は列指向型データベースとしてHBaseとCassandraを取り上げます。FacebookやTwitterなど、大規模なデータを抱える企業で使われ始めてきている注目のNoSQLデータベースです。
なお、今回も利用したコードやプログラムは、githubに置いてあるので適宜参照してください。
列指向データベースの特徴
一般的にRDBMSは行単位でデータを格納しているため、行単位での読み込み処理が得意です。これらは行指向データベースとも呼ばれます。一方、列指向データベースは列単位でデータを格納しており、列単位でデータを読み込む処理が得意です。
表1 行指向データベースと列指向データベースとの比較
データ型 | データの格納 | 得意なこと |
行指向データベース | 行単位 | 少数の行に対する取得・更新 |
列指向データベース | 列単位 | 大量の行に対する少数の列の取得、全行に対する特定列の一括更新 |
HBaseとCassandraの比較
それでは、HBaseとCassandraは何が違うのでしょうか。
HBaseとCassandraでは「何を保証するか」が違います。HBaseはデータの一貫性を保証します。例えば、特定のノードが故障した場合には自動的に他のノードにデータのコピー(レプリカ)を作成してくれます。一方で、Cassanderaではすべてのノードが同列で扱われるため、SPOF(単一故障点)が無く、可用性に強みがあります。ただし、ノード故障時にはレプリカが自動では復旧しないので、手動での対応が必要です。
表2 HBaseとCassandra、それぞれの特徴を比較
データベース | 強み | 構成 | レプリカの復旧 | 分散方法 |
HBase | 一貫性 | マスター/スレーブ | 自動 | sharding |
Cassandra | 可用性 | P2P型 | 手動 | Consistent Hashing |
どんなところに使える?
HBaseやCassandraはどちらもRDBMSで扱いきれないような大規模なデータの扱いに力を発揮します。強力なスケーラビリティも備えているため、データが増えても処理速度はそれほど低下しません。また、列指向データベースの強みを活かして、大量のデータを更新するようなバッチ処理のストレージとして利用しても有用でしょう。
- 具体的な利用シーン
-
- 大規模なデータをスケーラブルに処理する必要がある場合
- 大量データをバッチ処理する際のストレージとしての利用
HBaseのインストール
本稿では、実際にHBaseを使ってみましょう[1]。
まずは1台のサーバ上で環境を整えます。わかりにくかもしれないので、以下の手順を参考にしてください。JDK6およびHadoopのインストールが必要です。
HBaseが起動していれば、HBaseが起動しているサーバの60010番ポートにアクセスすることで以下のような画面が表示されるはずです。
HBaseのテーブル構造
ここで簡単にHBaseのテーブル構造を紹介します。RDBMSと似ていますが、列ファミリという新しい概念が登場してきます。これはイメージとしてはRDBMSの列(カラム)に相当するものです。なお、Cassandraのデータ構造はHBaseとはまた少し違うので注意してください。
HBaseを試してみる
それでは、HBaseをRailsから扱ってみます。今回はhbase-stargateというライブラリを使うのですが、このライブラリではStargateというRESTfulなWebサービスフロントエンドを利用します[2]。
実際のコードは非常にわかりやすいです。specファイルも用意されているので、それを見れば大体の使い方がわかると思います。
まとめ
今回扱ったHBaseやCassandraは、列ファミリというRDBMSでは存在しない概念があるため最初の敷居が高いかもしれませんが、非常に高性能なデータベースです。Hadoopのストレージとして利用することも可能なので、そういった観点からも今後ますます注目されていくと思われます[3]。