概要
「Apache Cassandra」の 1.1.6 をとりあえず試すためのメモ。
ネット上の記事が結構古い物しかない印象なので、公開しておく。
触りだけで、深い所までは書いてない。
設置から起動
curl -O http://ftp.riken.jp/net/apache/cassandra/1.1.6/apache-cassandra-1.1.6-bin.tar.gz
tar xvf apache-cassandra-1.1.6-bin.tar.gz
cd apache-cassandra-1.1.6
# conf の中で利用しているディレクトリを作成
sudo mkdir -p /var/log/cassandra
sudo chown -R `whoami` /var/log/cassandra
sudo mkdir -p /var/lib/cassandra
sudo chown -R `whoami` /var/lib/cassandra
# 起動
bin/cassandra -f
デフォルトでは Messaging Service が 7000 ポート、thrift server が 9160 ポートを利用する。
アクセス
標準クライアントは依然から存在する「bin/cassandra-cli」か、新しい「bin/cqlsh」を利用する。
ネットや README だと cassandra-cli を利用しているが、cqlsh の方が使いやすいのでそちらを利用する。
bin/cqlsh localhost
keyspaceの作成
最初に RDB のデータベース相当 である keyspace を作成する。
CREATE KEYSPACE Keyspace1
WITH strategy_class = 'SimpleStrategy'
AND strategy_options:replication_factor = 1;
keyspace に移動
cqlsh> use Keyspace1;
cqlsh:Keyspace1>
column family の作成
RDB のテーブル相当である column family を作成する。cqlshを利用すると、「CREATE COLUMNFAMILY」、「CREATE TABLE」のいずれでも作成できる。
「CREATE TABLE」を利用すると 従来の RDB 的に column も同時に作成できる。とりあえずこちらを利用したサンプル。
Snappy による圧縮を指定して作成する場合は以下のようにする。
CREATE TABLE Users (
user_id int PRIMARY KEY,
user_name varchar,
age int
)
WITH comparator=LongType
AND compression_parameters:sstable_compression='SnappyCompressor'
AND compression_parameters:chunk_length_kb=128;
確認は「DESCRIBE」コマンド。
DESCRIBE KEYSPACE Keyspace1
DESCRIBE COLUMNFAMILIE
DESCRIBE COLUMNFAMILY Users
データ挿入
データを挿入してみる。
SELECT * FROM Users;
INSERT INTO Users (user_id, user_name, age) VALUES (1, 'John Smith', 42);
INSERT INTO Users (user_id, user_name, age) VALUES (2, '日本語 挿入', 33);
SELECT * FROM Users;
INSERT は UPDATE と同じ動作をするので、prymary key が重複するデータを挿入すると上書きする。
データ参照
SELECT文を発行する。
まず count で行数を取得してみる。古いバージョンでは count は Row 中の column 数を表示している時もあったが、現在は Row の数を返すようになっている。
select count(*) from Users;
普通に SELECT文が発行できる。暗黙に「limit = 10000」が付与される。
select user_name, age from Users where user_id = 1 ;
データ削除
DELETE文を発行する。
delete from Users where user_id = 1;
「PRIMARY KEY」を設定していると、「PRIMARY KEY」以外の値が消えるだけで「PRIMARY KEY」の値が残るので、論理削除とかにした方が良い場合もある。
ソート
ORDER BY したい場合は、PRIMARY KEY を複合キーで作る必要があるので、PRIMARY KEY を複合キーで作成できる場合にしか使えない。