「分散データベースApache CassandraをMac OS Xにインストール」に続いて、Cassandraの実際の使い方を紹介していきます。
CQLでCassandraを操作する
CQLシェルをインストールしたので、さっそくCQLでCassandraのデータを操作してみたいと思います。
CQLは、Cassandra Query Languageの略で、Cassandra版のSQLです。
Cassandra Query Language (CQL) v3.1.5
CQLは、SQLとほぼ同じ構文となっているので、リレーショナルデータベースの経験がある人なら、誰でもすぐに理解できます。
キースペースを作成する。
まずは、キースペースを作成します。
キースペースは、MySQLでいうところのデータベースです。
CREATE KEYSPACE | DataStax CQL 3.0 Documentation
今回は、first_keyspaceという名前でキースペースを作成しました。
create keyspace first_keyspace with replication = {'class':'SimpleStrategy', 'replication_factor':1};
with replicationにレプリケーションに関する設定を記述します。
classに指定しているSimpleStrategyというのは、レプリケーションの方法です。Cassandraは仮想的に、分散ノードをリング上に並べるのですが、SimpleStrategyでは、リング上の隣のノードに対してレプリケーションをおこないます。
replication_factorに指定している1というのは、レプリケーションの冗長度です。2を指定すると、2つのノードに冗長化されます。今回は1台のノードで試しているので、replication_factorは1にします。つまり自身だけにレプリケーションをしている状態で、冗長化されていない状態です。
カラムファミリを作成する。
続いて、カラムファミリを作成します。
カラムファミリは、MySQLでいうところのテーブルになります。
CREATE TABLE | DataStax Cassandra 3.0 Documentation
その前に、先ほど作成したキースペースを選択しておきます。
use first_keyspace;
use文でカラムファミリを選択するのは、MySQLのuse文でデータベースを選択するのと同じです。
キースペースを選択したら、カラムファミリの作成に移ります。今回はfirst_tableという名前で、nameとvalueというカラムだけのカラムファミリを作成しました。
create table first_table (
name text PRIMARY KEY,
value text
);
この段階で、SQLと同様にselect文を実行してみます。
cqlsh:first_keyspace> select * from first_table;
(0 rows)
まだデータは入っていませんが、無事に実行できました。
データを追加する。
続いて、Cassandraにデータを保存してみます。
INSERT | DataStax CQL 3.0 Documentation
ここはSQLと完全に一致だったので、説明不要です。
insert into first_table (name, value) values ('hoge', 'fuga');
insert into first_table (name, value) values ('piyo', 'hage');
データを追加したら、select文で、データの確認ができます。
cqlsh:first_keyspace> select * from first_table;
name | value
------+-------
piyo | hage
hoge | fuga
(2 rows)
確かに挿入されています!
データを削除する。
続いてデータを削除してみます。
DELETE | DataStax CQL 3.0 Documentation
もう勝手が分かってきたので、「deleteは、こんなもんだろう!」と打ち込んでみました。
cqlsh:first_keyspace> delete from first_table;
Bad Request: line 1:23 mismatched input ';' expecting K_WHERE
残念ながら、エラーでした。where句は必須のようです。
cqlsh:first_keyspace> delete from first_table where value = 'fuga';
Bad Request: Non PRIMARY KEY value found in where clause
where句への指定がプライマリキーでない場合もエラーとなります。
delete from first_table where name = 'hoge';
where句にプライマリキーであるnameの条件を指定すると、無事に削除ができました。select文で確認してみると、確かにデータが削除されています。
cqlsh:first_keyspace> select * from first_table;
name | value
------+-------
piyo | hage
(1 rows)
CassandraがKVSの派生であることを考えると、プライマリキーの指定が必須であるのも納得はできます。
データを更新する。
データの更新もしてみます。
UPDATE | DataStax CQL 3.0 Documentation
この場合も、削除と同様にwhere句にプライマリキーの指定が必須ですが、SQLとほぼ同様に更新ができます。
update first_table set value = 'hogera' where name = 'piyo';
update文を実行したら、select文で結果を確認してみます。
cqlsh:first_keyspace> select * from first_table;
name | value
------+--------
piyo | hogera
(1 rows)
確かに更新ができています。
SQLに使い慣れた人ならCQLは簡単
というわけで、CQLは意外と簡単でした!
SQLとCQLの違いは、データベースの構造に由来するものなので、MySQLとCassandraのデータの持ち方を想像してみると理解しやすいかもしれません。
次は、Cassandraをプログラムから使うにはどうしたら良いのか、という話題に踏み込んでいきます。→「phpcassaで、PHPからCassandraを操作する。」
コメント
[…] 実際の使い方に続きます。→「Cassandraを操作するCQLの基本を試してみる。」 […]
[…] 「CQLを使って、CassandraをSQLライクに操作する。」に続いて、Cassandraをプログラムから操作してみます。 […]
[…] 分散データベースApache CassandraをMac OS Xにインストール CQLを使って、CassandraをSQLライクに操作する。 […]