最近話題の NoSQL Cassandra を試す

Apache Cassandra とは

Cassandra は最近取りざたされている NoSQL(Not only SQL) の一つです。Key Value Store のデータベースでスケーラビリティに優れています。公式サイトは http://cassandra.apache.org/ となり、現在バージョンは 0.6.2 となっています。利用には Java1.6 以上が必要となります。

環境設定

Windows 環境に導入します。特に環境設定は必要ありませんが、環境変数 JAVA_HOME は設定されている必要があります。
公式サイトより apache-cassandra-0.6.2-bin.tar.gz を落として解凍し、適当なディレクトリに配置します。bin ディレクトリ内に起動用の bat ファイルがあります。設定ファイルは conf 内に格納されています。デフォルトで、/var 以下にデータファイルとコミットログが出力される設定となっています。つまり Windows 環境だと C:\var が作成されるので気に食わない場合はconf配下の設定ファイルを編集します。ここではそのまま・

Cassandra サーバの起動

bin 配下の cassandra.bat にてサーバを起動します。起動すると以下のようなメッセージが出力されます。

Starting Cassandra Server
Listening for transport dt_socket at address: 8888
 INFO 23:16:37,521 Auto DiskAccessMode determined to be standard
 INFO 23:16:38,302 Saved Token not found. Using 135089628509433126109927955627369990654
 INFO 23:16:38,302 Saved ClusterName not found. Using Test Cluster
 INFO 23:16:38,334 Creating new commitlog segment /var/lib/cassandra/commitlog\CommitLog-1277216198334.log
 INFO 23:16:38,537 Starting up server gossip
 INFO 23:16:38,771 Binding thrift service to localhost/127.0.0.1:9160
 INFO 23:16:38,771 Cassandra starting up...

クライアントの起動

同様に、bin 配下の cassandra-cli.bat にて起動します。しかし、batファイルの内容がいまいちで以下のように ClassNotFound となってしまいます。

Starting Cassandra Client
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/cassandra/cli/CliMain
Caused by: java.lang.ClassNotFoundException: org.apache.cassandra.cli.CliMain
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
・・

cassandra-cli.bat の以下を

if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD%

以下のように変更して再度 起動してみます。

if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%~dp0..

以下のようなプロンプト表示となります。

Starting Cassandra Client
Welcome to cassandra CLI.

Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.
cassandra>

接続

プロンプト入力より connect します。

cassandra> connect localhost/9160
Connected to: "Test Cluster" on localhost/9160
cassandra>

以下のように cassandra-cli.bat の起動時に接続することもできます。

cassandra-cli.bat --host localhost --port 9160

insertとget

データベースに値を登録してみます。

cassandra> set Keyspace1.Standard2['jsmith']['first'] = 'John'
Value inserted.

各指定は以下の定義となっており、4階層のキーに値を割り付けています。

Keyspace1 keyspace
Standard2 column family
['jsmith'] key
['first'] column
'John' value

もう1レコード。

cassandra> set Keyspace1.Standard2['jsmith']['age'] = '42'
Value inserted.

取得はgetを使用します。

cassandra> get Keyspace1.Standard2['jsmith']
=> (column=first, value=John, timestamp=1277220393961000)
=> (column=age, value=42, timestamp=1277220411632000)
Returned 2 results.

insert した内容が取得できています。

・・今日はここまで