Cassandraのインストール
Cassandraとは
Cassandraは、米Facebookで開発されたNoSQLなデータベースシステムで、現在はApacheプロジェクトの元、オープンソースソフトウェアとして公開されています。
The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model.
Javaのインストール
CassandraはJavaで書かれているため、Java環境をインストールする必要があります。
$ sudo aptitude install sun-java6-jdk sun-java6-bin sun-java6-source sun-java6-fonts
$ vi ~/.bashrc export JAVA_HOME="/usr/lib64/jvm/java-6-sun" $ . ~/.bashrc
Cassandraのインストール
"/opt/local"以下にインストールしました。
$ wget http://ftp.riken.jp/net/apache/cassandra/0.6.1/apache-cassandra-0.6.1-bin.tar.gz $ gzip -dc apache-cassandra-0.6.1-bin.tar.gz | tar xvf - $ sudo mkdir -p /opt/local $ sudo mv apache-cassandra-0.6.1 /opt/local/ $ cd /opt/local $ sudo ln -s apache-cassandra-0.6.1 apache-cassandra
環境変数の設定およびログ・データベースディレクトリの作成を行います。
$ vi ~/.bashrc export CASSANDRA_HOME="/opt/local/apache-cassandra" export CASSANDRA_CONF="$CASSANDRA_HOME/conf" $ . ~/.bashrc $ sudo mkdir -p /var/lib/cassandra/commitlog $ sudo mkdir -p /var/lib/cassandra/data $ sudo mkdir -p /var/log/cassandra $ sudo chown -R `whoami` /var/lib/cassandra $ sudo chown -R `whoami` /var/log/cassandra
ログやデータベースディレクトリの設定は、"$CASSANDRA_CONF"以下の設定ファイルで行います。
今回は、デフォルト値を使用しました。
その他、ポート番号の設定なども"storage-conf.xml"で行います。
Cassandraの起動と接続
$ cd $CASSANDRA_HOME $ ./bin/cassandra -f INFO 21:24:12,418 Auto DiskAccessMode determined to be mmap INFO 21:24:12,668 Saved Token not found. Using 70600150308420422994252303942685177520 INFO 21:24:12,668 Saved ClusterName not found. Using Test Cluster INFO 21:24:12,668 Creating new commitlog segment /var/lib/cassandra/commitlog/CommitLog-1273753452668.log INFO 21:24:12,718 Starting up server gossip INFO 21:24:12,768 Binding thrift service to localhost/127.0.0.1:9160 INFO 21:24:12,768 Cassandra starting up...
"-f"オプションを付けるとフォアグラウンドで起動しますので、停止は"Ctrl"+"c"で行います。
pidファイルを指定したい場合は"-p"オプションで起動し、停止は"kill"コマンドで行います。
$ ./bin/cassandra -p cassandra.pid $ kill -KILL `cat cassandra.pid`
Cassandraへの接続は、"cassandra-cli"を使用します。
$ cd $CASSANDRA_HOME $ ./bin/cassandra-cli --host localhost --port=9160
データベース(キースペース)の一覧を取得してみます。
cassandra> show keyspaces Keyspace1 system cassandra> describe keyspace Keyspace1 Keyspace1.Super1 Column Family Type: Super Columns Sorted By: org.apache.cassandra.db.marshal.BytesType@13342a67 (省略)
Cassandraのデータ操作
Cassandraは、Key-Valueなデータ構造を保持できます。
しかし、memcachedなどの従来のKey-Valueストアとは異なり、Key部分を4次元もしくは5次元の構造にすることができます。
RDBとの用語の違いは以下の通りとなります。(Cassandra <-> RDB)
-
- キースペース <-> データベース (1次元)
- カラムファミリー <-> テーブル (2次元)
- キー <-> 主キー (3次元)
- カラム <-> カラム (4次元)
デフォルトの設定ファイルを使用すると、キースペース"Keyspace1"やカラムファミリー"Standard1"などが作成されます。
(データの登録)
-
- "Keyspace1"キースペースの"Standard1"カラムファミリーに、"jitsu102"キーで"blog"カラムに"http://d.hatena.ne.jp/jitsu102/"を登録
cassandra> set Keyspace1.Standard1['jitsu102']['blog'] = 'http://d.hatena.ne.jp/jitsu102/' Value inserted.
-
- "Keyspace1"キースペースの"Standard1"カラムファミリーに、"jitsu102"キーで"twitter"カラムに"http://twitter.com/jitsu"を登録
cassandra> set Keyspace1.Standard1['jitsu102']['twitter'] = 'http://twitter.com/jitsu' Value inserted.
(データ参照)
-
- カラムを指定して参照
cassandra> get Keyspace1.Standard1['jitsu102']['blog'] => (column=626c6f67, value=http://d.hatena.ne.jp/jitsu102/, timestamp=1273753972247000)
-
- キーを指定して参照
cassandra> get Keyspace1.Standard1['jitsu102'] => (column=74776974746572, value=http://twitter.com/jitsu, timestamp=1273754042323000) => (column=626c6f67, value=http://d.hatena.ne.jp/jitsu102/, timestamp=1273753972247000) Returned 2 results.
(データ更新)
cassandra> set Keyspace1.Standard1['jitu102']['blog'] = 'http://d.hatena.ne.jp/' Value inserted. cassandra> get Keyspace1.Standard1['jitsu102']['blog'] => (column=626c6f67, value=http://d.hatena.ne.jp/, timestamp=1273754339075000)
(データ削除)
cassandra> del Keyspace1.Standard1['jitsu102']['blog'] column removed. cassandra> get Keyspace1.Standard1['jitsu102'] => (column=74776974746572, value=http://twitter.com/jitsu, timestamp=1273754042323000) Returned 1 results.