akishin999の日記

調べた事などを書いて行きます。

Windows で Cassandra を動かしてみる

話題の分散データベース「Cassandra」をお手軽に試したかったので、Windows で動かしてみました。
(会社でも自宅でもメイン PC が Windows なもので・・・^^;)

公式サイト

The Apache Cassandra Project
http://cassandra.apache.org/

インストール

Cassandra は Java 製なので、インストールするには事前に Java 1.6 以降のインストールが必要です。
インストールは上記公式サイト内 Download ページより、「apache-cassandra-0.6.1-bin.tar.gz」をダウンロードし、適当な場所に展開すれば完了です。

起動

まずはサーバを起動します。
コマンドプロンプトより Cassandra を展開したディレクトリに移動し、「bin/cassandra.bat」を実行します。

E:\Programs\apache-cassandra-0.6.1-bin>bin\cassandra.bat
Starting Cassandra Server
Listening for transport dt_socket at address: 8888
 INFO 23:05:30,888 Auto DiskAccessMode determined to be standard
 INFO 23:05:31,170 Sampling index for E:\var\lib\cassandra\data\Keyspace1\Standard2-1-Data.db
 INFO 23:05:31,182 Sampling index for E:\var\lib\cassandra\data\Keyspace1\Standard2-2-Data.db
 INFO 23:05:31,217 Deleted E:\var\lib\cassandra\data\Keyspace1\Standard1-1-Data.db
 INFO 23:05:31,223 Deleted E:\var\lib\cassandra\data\Keyspace1\Standard1-2-Data.db
 INFO 23:05:31,228 Deleted E:\var\lib\cassandra\data\Keyspace1\Standard1-3-Data.db
 INFO 23:05:31,232 Deleted E:\var\lib\cassandra\data\Keyspace1\Standard1-4-Data.db
 INFO 23:05:31,233 Sampling index for E:\var\lib\cassandra\data\Keyspace1\Standard1-5-Data.db
 INFO 23:05:31,248 Sampling index for E:\var\lib\cassandra\data\system\LocationInfo-1-Data.db
 INFO 23:05:31,253 Replaying \var\lib\cassandra\commitlog\CommitLog-1272511839426.log
 INFO 23:05:31,282 Creating new commitlog segment /var/lib/cassandra/commitlog\CommitLog-1272549931282.log
 INFO 23:05:31,342 Standard1 has reached its threshold; switching in a fresh Memtable at CommitLogContext(file='/var/lib/cassandra/commitlog\CommitLog-1272549931282.log', position=121)
 INFO 23:05:31,343 Enqueuing flush of Memtable(Standard1)@4926325
 INFO 23:05:31,345 Writing Memtable(Standard1)@4926325
 INFO 23:05:31,528 Completed flushing E:\var\lib\cassandra\data\Keyspace1\Standard1-6-Data.db
 INFO 23:05:31,559 Log replay complete
 INFO 23:05:31,605 Saved Token found: 94628080644493457336183239840499897576
 INFO 23:05:31,606 Saved ClusterName found: Test Cluster
 INFO 23:05:31,615 Starting up server gossip
 INFO 23:05:31,668 Binding thrift service to localhost/127.0.0.1:9160
 INFO 23:05:31,677 Cassandra starting up...


起動したら、別のコマンドプロンプトより、同じく Cassandra を展開したディレクトリに移動し、「bin/cassandra-cli.bat」を実行します。

E:\Programs\apache-cassandra-0.6.1-bin>bin\cassandra-cli.bat
Starting Cassandra Client
Welcome to cassandra CLI.

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


クライアントが起動したので、サーバに接続してみます。

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


上記のように表示されていれば、無事接続できています。

使ってみる


Cassandra ではデフォルトで「Test Cluster」が用意されているので、上記ではクライアントはその「Test Cluster」に接続しました。
同様に、Cassandra ではデフォルトの状態で「Keyspace1」という名前の keyspace と、その配下にいくつかの column family が定義されています。
keyspace は RDBMS でいうところのデータベース(スキーマ)で、column family はテーブルに相当する概念になります。

これらがデフォルトで用意されているため、最初は特にデータ構造の設計などを行わずとも動作の確認を行う事ができます。


同梱の README.txt に記載されているサンプルが Keyspace1 を使用するものとなっているので、早速実行してみます。

cassandra> set Keyspace1.Standard1['jsmith']['first'] = 'John'
Value inserted.
cassandra> set Keyspace1.Standard1['jsmith']['last'] = 'Smith'
Value inserted.
cassandra> set Keyspace1.Standard1['jsmith']['age'] = '42'
Value inserted.
cassandra> get Keyspace1.Standard1['jsmith']
=> (column=last, value=Smith, timestamp=1270349912867)
=> (column=first, value=John, timestamp=1270349904579)
=> (column=age, value=42, timestamp=1270349918835)
Returned 3 results.


無事、値の設定と取得が行えました。
Cassandra では keyspace と column family は 「conf/storage-conf.xml」で定義されているのですが、key と column は実行時に自由に増やせるため、上記サンプルの通りではなく、何か好きな値を指定しても動作するはずです。

データモデル


上記のサンプルの記述が具体的に何を意味しているかは、同じく README.txt 内に記載されていた以下の図がわかりやすかったです。
(Windows 環境でバックスラッシュが円記号になってしまっていたため、線を表す記号のみ変えています。)

 set Keyspace1.Standard2['jsmith']['first'] = 'John'
      │           │       │       │          │
      │           │       └ key   │          └ value
      │           │                └ column
      └ keyspace  └ column family


それぞれの更に詳しい解説は、有志の方により日本語訳が進められている下記の公式 Wiki ページを読むのがいいかと思います。


DataModel_JP - Cassandra Wiki
http://wiki.apache.org/cassandra/DataModel_JP


次回は Java から Cassandra を使用してみたいと思います。