Mac OS Xに Cassandra 2.x環境を構築する

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の導入から簡単な使い方でした。