【Apache Cassandra】テーブル作成・データ登録

【Apache Cassandra】テーブル作成・データ登録 サーバー

「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におけるデータの挿入を説明しました。

タイトルとURLをコピーしました