CQLを使って、CassandraをSQLライクに操作する。

分散データベースApache CassandraをMac OS Xにインストール」に続いて、Cassandraの実際の使い方を紹介していきます。

CQLでCassandraを操作する

CQLシェルをインストールしたので、さっそくCQLでCassandraのデータを操作してみたいと思います。

CQLは、Cassandra Query Languageの略で、Cassandra版のSQLです。

スクリーンショット 2014-04-05 12.39.45

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を操作する。

About katty0324

Scroll To Top