はじめに
今回は列指向型データベースとしてHBaseとCassandraを取り上げます。FacebookやTwitterなど、
なお、
列指向データベースの特徴
一般的にRDBMSは行単位でデータを格納しているため、
データ型 | データの格納 | 得意なこと |
---|---|---|
行指向データベース | 行単位 | 少数の行に対する取得・ |
列指向データベース | 列単位 | 大量の行に対する少数の列の取得、 |
HBaseとCassandraの比較
それでは、
HBaseとCassandraでは
データベース | 強み | 構成 | レプリカの復旧 | 分散方法 |
---|---|---|---|---|
HBase | 一貫性 | マスター/スレーブ | 自動 | sharding |
Cassandra | 可用性 | P2P型 | 手動 | Consistent Hashing |
どんなところに使える?
HBaseやCassandraはどちらもRDBMSで扱いきれないような大規模なデータの扱いに力を発揮します。強力なスケーラビリティも備えているため、
- 具体的な利用シーン
-
- 大規模なデータをスケーラブルに処理する必要がある場合
- 大量データをバッチ処理する際のストレージとしての利用
HBaseのインストール
本稿では、
まずは1台のサーバ上で環境を整えます。わかりにくかもしれないので、
# http://java.sun.com/javase/ja/6/download.html からJDK6をダウンロード # JDK 1.6.0_18, JDK 1.6.0_19は色々な問題があるので使用しない方が良い sudo sh jdk-6u21-linux-i586-rpm.bin java -version # 1.6.0_21 wget http://archive.cloudera.com/redhat/cdh/cloudera-cdh3.repo sudo mv cloudera-cdh3.repo /etc/yum.repos.d/ sudo yum update yum sudo yum install hadoop-0.20 -y sudo yum install hadoop-0.20-conf-pseudo -y sudo yum install hadoop-hbase -y # JAVA_HOMEの設定が必要 export JAVA_HOME=xxx sudo /etc/init.d/hadoop-0.20-namenode start sudo /etc/init.d/hadoop-0.20-jobtracker start sudo /etc/init.d/hadoop-0.20-datanode start sudo /etc/init.d/hadoop-0.20-tasktracker start sudo /etc/init.d/hadoop-hbase-master start
HBaseが起動していれば、

HBaseのテーブル構造
ここで簡単にHBaseのテーブル構造を紹介します。RDBMSと似ていますが、

HBaseを試してみる
それでは、
gem install hbase-stargate
hbase org.apache.hadoop.hbase.rest.Main # Stargateの起動
実際のコードは非常にわかりやすいです。specファイルも用意されているので、
class HbaseController < ApplicationController
require 'stargate'
def sample
client = Stargate::Client.new("http://localhost:8080")
# テーブルの一覧を返す
client.list_tables
# usersテーブルを作成(user, blogは列ファミリ)
client.create_table('users', 'user', 'blog')
# usersテーブルにrow_idがA00001のデータを作成する
client.create_row('users', 'A00001', Time.now.to_i, [{:name => 'blog:title', :value => "(゚∀゚)o彡 sasata299's blog"}, {:name => 'blog:type', :value => 'livedoor'}])
# usersテーブルのrow_idがA00001のデータを取得する
# 見つからない場合、例外(Stargate::RowNotFoundError)を返す
row = client.show_row('users', 'A00001')
row.columns.each do |_row|
p _row.name # "blog:title", "blog:type"
p _row.value # "(゚∀゚)o彡 sasata299's blog", "livedoor"
end
# usersテーブルを削除する
client.delete_table('users')
end
end
まとめ
今回扱ったHBaseやCassandraは、