「Apache Cassandraのキースペースがイマイチわからない・・・」
「Apache Cassandraでテーブルを作成したい」
「Apache Cassandraにデータを登録(挿入)したい」
このような場合には、この記事の内容が参考になります。
この記事では、Apache Cassandraでのテーブル作成・データ登録について解説しています。
本記事の内容
- KEYSPACE(キースペース)とは?
- Apache Cassandraにおけるテーブル作成
- Apache Cassandraにおけるデータの挿入
それでは、上記に沿って解説していきます。
KEYSPACE(キースペース)とは?
キースペースには、データ・レプリケーション係数を制御する最上位のデータベース・オブジェクトです。
そして、以下のモノを含みます。
- テーブル
- マテリアライズド・ビュー
- ユーザー定義の型
- 関数
- 集計
早い話、リレーショナルデータベースにおけるデータベースと同じモノだと言えます。
ただ、キースペースの作成時には次の項目を意識する必要があります。
- レプリケーション・ストラテジ
- レプリケーション係数
これは、Apache Cassandraでレプリケーションが前提となっているからです。
それぞれの項目について、以下で説明します。
レプリケーション・ストラテジ
レプリケーション・ストラテジは、次の二つから選びます。
- SimpleStrategy
- NetworkTopologyStrategy
データセンターが1つであれば、SimpleStrategyを選択します。
複数のデータセンターがあれば、NetworkTopologyStrategyを選びましょう。
とりあえず、その程度の認識で問題ありません。
レプリケーション係数
レプリケーション係数とは、キースペース・データのコピーの総数のことです。
同一データセンター内のノード数を指定しておけば、満遍なくレプリケーションされます。
レプリケーション・ストラテジにより、レプリケーション係数の設定方法が異なります。
SimpleStrategyを使用する場合
CREATE KEYSPACE keyspace_name WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };
NetworkTopologyStrategyを使用する場合
CREATE KEYSPACE keyspace_name WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc_name_1' : 3, 'dc_name_2' : 2};
まとめ
テスト的に試すならば、次のクエリでキースペースを作成しましょう。
CREATE KEYSPACE sample_keyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
なお、CQLを実行するにはcqlshが起動する必要があります。
cqlshについては、次の記事で説明しています。
以上、KEYSPACE(キースペース)について説明しました。
次は、Apache Cassandraにおけるテーブル作成を説明します。
Apache Cassandraにおけるテーブル作成
テーブルは、キースペースありきで作成します。
作成したキースペースが存在するかどうかから、確認しましょう。
確認するには、次のコマンドを用います。
DESCRIBE keyspaces;
上記を実行した結果は、以下。
cqlsh> DESCRIBE keyspaces; sample_keyspace system_auth system_schema system_views system system_distributed system_traces system_virtual_schema
「sample_keyspace」を確認できます。
では、このキースペースに接続します。
接続するには、次のコマンドを実行。
USE keyspace_name;
実行した結果は、以下。
cqlsh> USE sample_keyspace; cqlsh:sample_keyspace>
プロンプト表示が、「cqlsh」から「cqlsh:sample_keyspace」に変わりました。
これで「sample_keyspace」に接続中だとわかります。
次は、テーブル作成のクエリを実行します。
このクエリは、SQLとほぼ同じです。
CREATE TABLE user (id int PRIMARY KEY, age int, name text);
上記クエリを実行したら、何も表示されません。
cqlsh:sample_keyspace> CREATE TABLE user (id int PRIMARY KEY, age int, name text); cqlsh:sample_keyspace>
これだと、テーブルが作成されたかどうか不安です。
そこで、テーブル一覧を確認してみましょう。
cqlsh:sample_keyspace> DESCRIBE tables; user cqlsh:sample_keyspace>
作成した「user」テーブルを確認できます。
テーブル定義は、次のコマンドで確認可能です。
cqlsh:sample_keyspace> DESCRIBE user; CREATE TABLE sample_keyspace.user ( id int PRIMARY KEY, age int, name text ) WITH additional_write_policy = '99p' AND bloom_filter_fp_chance = 0.01 AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} AND cdc = false AND comment = '' AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND crc_check_chance = 1.0 AND default_time_to_live = 0 AND extensions = {} AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair = 'BLOCKING' AND speculative_retry = '99p';
以上、Apache Cassandraにおけるテーブル作成を説明しました。
次は、Apache Cassandraにおけるデータの挿入を説明します。
Apache Cassandraにおけるデータの挿入
SQL文と同じ要領でデータを挿入できます。
cqlsh:sample_keyspace> INSERT INTO user (id, age, name) VALUES (1, 20, '山田太郎'); cqlsh:sample_keyspace> INSERT INTO user (id, age, name) VALUES (2, 30, '佐藤次郎'); cqlsh:sample_keyspace> INSERT INTO user (id, age, name) VALUES (3, 40, '高橋三郎');
SQLさえ理解していれば、何も難しいところはありません。
では、挿入したデータを確認しましょう。
データの確認もSQLと同じです。
普通にSELECT文で対応できます。
cqlsh:sample_keyspace> SELECT * FROM user; id | age | name ----+-----+---------- 1 | 20 | 山田太郎 2 | 30 | 佐藤次郎 3 | 40 | 高橋三郎
同じように、UPDATEとDELETEで更新と削除も可能です。
SQLを使うように、CQLが利用できます。
以上、Apache Cassandraにおけるデータの挿入を説明しました。