SQLのようなCQLでApache Cassandraを操作

2017.07.21

こんにちは。YDCの やす です。
カラム指向型NoSQLの中でも有名な「Apache Cassandra」についての紹介したいと思います。
Cassandraはエンタープライズな領域で利用されるNoSQLの中でも
分散データベース管理システムとして大規模データの格納に向いていると評価されています。
またCassandraはSQLライクに使用できるという特徴があります。

今回は最新版である Cassandra 3.11.0 のインストールと、
Cassandraに対してSQLライクな問い合わせができる「CQL」という言語で
Cassandraの簡単な操作をしてみましたので紹介します!
「CQL」と「SQL」がどれだけ似ているか、今回の記事でお伝えできればと思います!

環境
OS Apache Cassandra Java Python
Windows Server 2012 3.11.0 1.8.0 2.7.13

インストール前の事前設定

CassandraをWindowsで使用する場合、事前にJavaとPythonの設定が必要になります。
コマンドプロンプトで環境変数のパスが通っていることを確認しておきましょう。

c:\>java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
★バージョンが表示されることを確認

c:\>python --version
Python 2.7.13★バージョンが表示されることを確認

インストール

インストールは簡単です。Apacheのサイトからモジュールをダウンロードして、
任意のフォルダーに展開するだけです!

※インストールモジュールは以下からダウンロード可能です。
http://cassandra.apache.org/download/

Cassandra 3.11.0をインストールしようと思いますので、Apacheのサイトから
「apache-cassandra-3.11.0-bin.tar.gz」というモジュールをダウンロードして展開してみます。
今回、私は「C:\cassandra\apache-cassandra-3.11.0」となるようにモジュールを展開しました。
展開した後はCassandraを起動してみましょう。起動には「cassandra.bat」というバッチファイルを叩きます。

c:\>C:\cassandra\apache-cassandra-3.11.0\bin\cassandra.bat
WARNING! Powershell script execution unavailable.
Please use 'powershell Set-ExecutionPolicy Unrestricted'
on this user-account to run cassandra with fully featured
functionality on this platform.
Starting with legacy startup options
Starting Cassandra Server
INFO [main] 2017-07-15 16:03:46,072 YamlConfigurationLoader.java:89 - Configuration location: file:/C:/cassandra/apache-cassandra-3.11.0/conf/cassandra.yaml
... 一部省略 ...
INFO [main] 2017-07-15 16:03:55,917 StorageService.java:1439 - JOINING: Finish joining ring
INFO [main] 2017-07-15 16:03:56,090 StorageService.java:2255 - Node localhost/127.0.0.1 state jump to NORMAL
INFO [main] 2017-07-15 16:03:56,266 NativeTransportService.java:75 - Netty using Java NIO event loop
INFO [main] 2017-07-15 16:03:56,447 Server.java:155 - Using Netty Version: [netty-buffer=netty-buffer-4.0.44.Final.4528
12a, netty-codec=netty-codec-4.0.44.Final.452812a, netty-codec-haproxy=netty-codec-haproxy-4.0.44.Final.452812a, netty-c
odec-http=netty-codec-http-4.0.44.Final.452812a, netty-codec-socks=netty-codec-socks-4.0.44.Final.452812a, netty-common=
netty-common-4.0.44.Final.452812a, netty-handler=netty-handler-4.0.44.Final.452812a, netty-tcnative=netty-tcnative-1.1.3
3.Fork26.142ecbb, netty-transport=netty-transport-4.0.44.Final.452812a, netty-transport-native-epoll=netty-transport-nat
ive-epoll-4.0.44.Final.452812a, netty-transport-rxtx=netty-transport-rxtx-4.0.44.Final.452812a, netty-transport-sctp=net
ty-transport-sctp-4.0.44.Final.452812a, netty-transport-udt=netty-transport-udt-4.0.44.Final.452812a]
INFO [main] 2017-07-15 16:03:56,448 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (u
nencrypted)...
INFO [main] 2017-07-15 16:03:56,523 CassandraDaemon.java:527 - Not starting RPC server as requested. Use JMX (StorageSe
rvice->startRPCServer()) or nodetool (enablethrift) to start it
WARN [GossipTasks:1] 2017-07-15 16:03:56,917 Gossiper.java:789 - Gossip stage has 1 pending tasks; skipping status chec
k (no nodes will be marked down)

CQLで操作

1.KeySpaceの作成

Cassandraのインストールと起動が確認できたので、早速KeySpaceを作成してみましょう。
KeySpaceとはCassandraにおいて、一番大きいデータのまとまりのことで、全てのデータは
どこか一つのKeySpaceに所属します。SQL Serverでいうところのデータベースにあたります。
ちなみにCassandraの接続には「cqlsh.bat」というバッチを叩きます。

c:\>C:\cassandra\apache-cassandra-3.11.0\bin\cqlsh.bat

WARNING: console codepage must be set to cp65001 to support utf-8 encoding on Windows platforms.
If you experience encoding problems, change your console codepage with 'chcp 65001' before starting cqlsh.

Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
WARNING: pyreadline dependency missing. Install to enable tab completion.
cqlsh>
cqlsh>
cqlsh> create keyspace mykey with replication = {'class':'SimpleStrategy', 'replication_factor':1};
cqlsh> desc mykey

CREATE KEYSPACE mykey WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;

cqlsh>

上記の赤文字の部分がKeySpaceを作成するためのCREATE文になります。
KeySpace作成時のオプションの意味ですが、「SimpleStrategy」はレプリケーション方法、
「replication_factor」は冗長度を意味します。今回は1台のノードで検証しているので 「replication_factor」を1としています。
KeySpace作成時に指定された「replication_factor」の数だけ、データの複製(レプリカ)が作られます。
Cassandraはマスター・セカンダリというような主副関係はなく、すべてのレプリカは等価となります。

ちなみにdescでKeySpaceの属性を確認することができます。


2.カラムファミリの作成

続いてカラムファミリを作成してみます。リレーショナルデータベースでいうテーブルにあたります。
作成する前にuse文でKeySpaceに接続します。ここもSQL Serverに似ていますね。

cqlsh> use mykey;
cqlsh:mykey>
cqlsh:mykey>
cqlsh:mykey> create table my_test (
... name text PRIMARY KEY,
... value text
... );

cqlsh:mykey>
cqlsh:mykey> desc my_test

CREATE TABLE mykey.my_test (
name text PRIMARY KEY,
value text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32',
'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
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_chance = 0.0
AND speculative_retry = '99PERCENTILE';

cqlsh:mykey>

上記の赤文字の部分がカラムファミリを作成するためのCREATE文になります。
リレーショナルデータベースのCREATE TABLE文に似ているようです。
ちなみにdescでカラムファミリの属性も確認することができます。


3.INSERT文とSELECT文

今度はカラムファミリにレコードをINSERTして、その後SELECTで内容を確認してみます。

cqlsh:mykey> insert into my_test (name, value) values ('dog', 'wan!');
cqlsh:mykey> insert into my_test (name, value) values ('cat', 'nya-!');
cqlsh:mykey>
cqlsh:mykey>
cqlsh:mykey> select * from my_test;

name | value
------+-------
cat | nya-!
dog | wan!

(2 rows)

INSERT文、SELECT文に関してはSQLとほぼ同じです。
無事、レコードの挿入と中身の確認ができました。

どうでしたか?想像以上にCQLは、SQLとかなり似ている構文でした!
リレーショナルデータベースの経験がある人なら、理解しやすかったのではないでしょうか。
ぜひ一度触ってみてください!

Standby Expressに関するお問合わせ

  • TEL 042-333-6217
  • FAX 042-352-6101
  • LINE
  • Mail