Cassandra はFacebook社が開発したオープンソースの分散データベースサーバです。
Cassandraの特徴
CAP定理のうちAPを重視しているため、以下の様な特徴があります。
- 高可用性
- 単一障害点(SPOF)がないアーキテクチャ
- すべてのノードが同一の機能を持ち、データは複製されて同じクラスタ内の複数のノードに格納される。
データ構造
キースペース(Keyspace)
- RDBMSでいうデータベース。
- カラムファミリの集合を扱う単位。
カラムファミリ(Column Family)
- RDBMSでいうテーブル。
- ロウの集合を扱う単位
ロウ(Row)
- カラムの集合を扱う単位(ロウキーに多数のカラムが紐付けられる)。
- ロウキーに基づきデータがどのノードに分散されるか決定している。
カラム(Column)
- データの最小単位。
- 名前(name)、値(value)、タイムスタンプ(timestamp)で構成される。
環境
Mac OS X 10.9.4 Cassandra 2.0.9
インストール
$ brew install cassandra
起動する
$ ln -sfv /usr/local/opt/cassandra/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.cassandra.plist
停止する
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.cassandra.plist
起動確認
$ netstat -ant | grep 9160 | grep LISTEN
Cassandra CLI
コマンドラインからCassandraを操作することができます。
もう使うことはないと思いますが、一応使い方をメモしておきます。
$ cassandra-cli # キースペースの一覧を表示する [default@unknown] show keyspaces; # キースペース作成(例:mykeyspace) [default@unknown] create keyspace mykeyspace; # キースペース選択(例:mykeyspace) [default@unknown] use mykeyspace; # カラムファミリー作成(例:users) [default@mykeyspace] create column family users with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type; # Userカラムファミリのtaroキーのageカラムにvalueとして28をセットする [default@mykeyspace] set users[taro][age] = 28; # カラムファミリを削除する(例:users) [default@mykeyspace] drop column family users; # キースペースを削除する(例:mykeyspace) [default@mykeyspace] drop keyspace mykeyspace;
CQL
SQLライクな構文を使ってCassandraを操作することができます。
インストールする
$ brew install python $ sudo easy_install pip $ sudo pip install cql
使い方
$ cqlsh # キースペースの一覧を表示する cqlsh> DESCRIBE KEYSPACES; # キースペース作成(例:mykeyspace) cqlsh> CREATE KEYSPACE mykeyspace WITH replication = { 'class': 'SimpleStrategy', 'replication_factor' : 1 }; # キースペース選択(例:mykeyspace) cqlsh> USE mykeyspace; # カラムファミリー作成(例:users) cqlsh:mykeyspace> CREATE TABLE users ( key varchar PRIMARY KEY, age int ); # usersカラムファミリのtaroキーのageカラムにvalueとして28をセットする cqlsh:mykeyspace> INSERT INTO users (KEY, age) VALUES ('taro', 28); # カラムファミリを削除する(例:users) cqlsh:mykeyspace> DROP TABLE users; # キースペースを削除する(例:mykeyspace) cqlsh> DROP KEYSPACE mykeyspace;
以上、Cassandraの導入から簡単な使い方でした。