Cassandra Mac OS Xで試してみた。

                                                          • -

cassandra インストール

                                                          • -
$ wget http://ftp.kddilabs.jp/infosystems/apache//cassandra/1.0.7/apache-cassandra-1.0.7-bin.tar.gz
$ tar xvzf apache-cassandra-1.0.7-bin.tar.gz
$ vi ~/.bashrc

export CASSANDRA_HOME=/Users/xxxxx/apache-cassandra-1.0.7
export PATH=$PATH:$CASSANDRA_HOME/bin

[apache-cassandra-1.0.7]$mkdir log
$ mkdir data
$ mkdir commitlog
$ mkdir saved_caches

#ログ設定の変更

[apache-cassandra-1.0.7]$vi conf/log4j-server.properties 

# Edit the next line to point to your logs directory
#log4j.appender.R.File=/var/log/cassandra/system.log
log4j.appender.R.File=/Users/xxxxx/apache-cassandra-1.0.7/log/system.log

#もろもろのパス変更

[apache-cassandra-1.0.7]$vi conf/cassandra.yaml

# directories where Cassandra should store data on disk.
data_file_directories:
- /Users/xxxxx/apache-cassandra-1.0.7/data

# commit log
commitlog_directory: /Users/xxxxx/apache-cassandra-1.0.7/commitlog

# saved caches
saved_caches_directory: /Users/xxxxx/apache-cassandra-1.0.7/saved_caches

# 起動

$cassandra -f
                                                                        • -

クライアントからの接続確認

                                                                        • -

参考:http://wiki.apache.org/cassandra/CassandraCli

#クライアント接続

$cassandra-cli
[default@unknown] connect localhost/9160;
Connected to: "Test Cluster" on localhost/9160

#キースペースを作る
; キースペース ≒ データベース

[default@unknown] create keyspace Twissandra;
e52e0690-4bb8-11e1-0000-242d50cf1f9f
Waiting for schema agreement...
... schemas agree across the cluster

#キースペースを選択

[default@unknown] use Twissandra;
Authenticated to keyspace: Twissandra

#ひとつのカラムファミリー"User"を作成する
; カラムファミリ≒RDBMSでいうところのテーブル
; Cassandra では別々のファイルで管理される。

[default@unknown] create column family User with comparator = UTF8Type;
8c8adfd0-4bb9-11e1-0000-242d50cf1f9f
Waiting for schema agreement...
... schemas agree across the cluster

#"User" カラムファミリーののために更新。人がよめる形でデータを返し、年齢でフィルタできるように。

[default@unknown] update column family User with
        column_metadata =
        [
        {column_name: first, validation_class: UTF8Type},
        {column_name: last, validation_class: UTF8Type},
        {column_name: age, validation_class: UTF8Type, index_type: KEYS}
        ];

#データを追加する(行を追加)
; 行(ROWS) RDBMSでいうところの行。

[default@unknown] assume User keys as utf8; //※ set User[utf8('jsmith')]

['first'] = 'John';でもよいらしい
Assumption for column family 'User' added successfully.

[default@unknown] set User['jsmith']['first'] = 'John';
[default@unknown] set User['jsmith']['last'] = 'Smith';
[default@unknown] set User['jsmith']['age'] = '38';

→エラー
cannot parse 'John' as hex bytes
"key_validation_class: UTF8Type" をカラムに指定すればOKだった↓

update column family User with
column_metadata =
[
{column_name: first, validation_class: UTF8Type,key_validation_class: UTF8Type},
{column_name: last, validation_class: UTF8Type,key_validation_class: UTF8Type},
{column_name: age, validation_class: UTF8Type, index_type: KEYS}
];

※再度データ追加

#データを取得してみる

[default@Twissandra] get User where age='35';
                                    • -

RowKey: jsmith
=> (column=age, value=35, timestamp=1327980874094000)
=> (column=first, value=John, timestamp=1327980704811000)
=> (column=last, value=Smith, timestamp=1327980864455000)

1 Row Returned.
Elapsed time: 7 msec(s).

#すべてのデータを取得する場合は

[default@Twissandra] list User;

#インタラクティブでなく、スクリプトで実行したい場合

$ cassandra-cli -host localhost -port 9160 -f script.txt

※なんだかんだ、RDBMSと基本的なお作法はかわりなく、スムーズに理解できました!