「今後伸びてくるNoSQLデータベースとは?」
「Apache Cassandraより速いデータベースを探している」
「Amazon DynamoDB(クラウド)のコストを削減したい」
このような場合には、ScyllaDBがオススメです。
この記事では、ScyllaDBについて解説しています。
本記事の内容
- ScyllaDBとは?
- DockerによるScyllaDBのインストール
- DockerによるScyllaDBの動作確認
それでは、上記に沿って解説していきます。
ScyllaDBとは?
ScyllaDBは、NoSQLデータベースです。
技術的な特徴としては、シェアードナッシング方式を採用しています。
そして、以下のデータベースとAPI互換性があります。
- Apache Cassandra
- Amazon DynamoDB
API互換性があることにより、同じように利用できます。
つまり、同じコマンド、同じドライバーが使えます。
これは利用する側からすると、非常に嬉しいことです。
ScyllaDBを利用する際に、学習コストを大幅に下げることができます。
知名度が劣るScyllaDBにとっては、これは有効な戦略でしょう。
それに加えて、ScyllaDBは両データベースより速いのです。
Apache Cassandraの場合だと、開発言語自体が異なります。
データベース | 言語 |
Apache Cassandra | Java |
ScyllaDB | C++ |
そりゃ、JavaよりはC++の方が高速ですよね。
さらには、速さだけではなく、ディスクの利用効率でもScyllaDBが優ります。
それらのことから、ScyllaDBはコスト削減に有効です。
その意味でも、ScyllaDBは将来有望なデータベースと言えます。
以上、ScyllaDBについて説明しました。
次は、DockerによるScyllaDBのインストールを説明します。
DockerによるScyllaDBのインストール
ScyllaDBには、複数のインストール方法が用意されています。
Ubuntuの場合であれば、次の方法が利用可能です。
- パッケージ
- ソース
- Docker
今回は、ScyllaDBの動作確認を目的にしています。
もっと言うと、Apache Cassandraとの類似性を確認しておきたいです。
そのため、今回はDockerを用いてScyllaDBをインストールします。
公式でも、検証ではDockerを利用することを推奨しています。
では、DockerによるScyllaDBを説明していきます。
大前提として、Dockerはインストール済みとしておきます。
dockerコマンドを利用する際には、一つ注意点があります。
dockerコマンド実行時には、都度「sudo」を付けないといけません。
これが面倒だと言う場合は、dockerグループにユーザーを追加します。
ただし、セキュリテイ的にはその分だけ隙きが出来るのは理解しておきましょう。
$ sudo usermod -aG docker ユーザー名
準備が整ったら、次のコマンドでScyllaDBをインストール(イメージの作成)します。
コンテナの起動まで一気に行います。
docker run --name コンテナ名 -d scylladb/scylla
上記コマンドを実行した結果は、以下。
$ docker run --name my_scylla -d scylladb/scylla Unable to find image 'scylladb/scylla:latest' locally latest: Pulling from scylladb/scylla e0b25ef51634: Pull complete f3dccb91f93f: Pull complete Digest: sha256:c666dc96a6d7feae84cd86f8982e2e52fd3f45dc19d3d5bbc2700f4f48c675c3 Status: Downloaded newer image for scylladb/scylla:latest 437592d5bcab7c4202c0dbac11987aea3d0cb8205ef04a1c83eddf4f3b249235
これで、ScyllaDBのインストールは完了です。
以上、DockerによるScyllaDBのインストールを説明しました。
次は、DockerによるScyllaDBの動作確認を説明します。
DockerによるScyllaDBの動作確認
イメージの作成に加えて、コンテナの作成・起動まで完了している状態です。
そのため、ScyllaDBの動作確認ができる状態と言えます。
ScyllaDBは、Apache Cassandraと同じようにアクセスできます。
Apache Cassandraでは、以下のユーティリティでアクセスします。
- nodetool
- cqlsh
以下では、それぞれのユーティリティについて確認していきます。
nodetool
ヘルプは、次のコマンドで確認できます。
nodetool help
Dockerを経由するため、次のようなコマンドで確認することになります。
$ docker exec -it my_scylla nodetool help usage: nodetool [(-p <port> | --port <port>)] [(-u <username> | --username <username>)] [(-pw <password> | --password <password>)] [(-pwf <passwordFilePath> | --password-file <passwordFilePath>)] [(-h <host> | --host <host>)] <command> [<args>] The most commonly used nodetool commands are: bootstrap Monitor/manage node's bootstrap process checkAndRepairCdcStreams Checks that CDC streams reflect current cluster topology and regenerates them if not. Warning: DO NOT use this while performing other administrative tasks, like bootstrapping or decommissioning a node. cleanup Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces clearsnapshot Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots compact Force a (major) compaction on one or more tables or user-defined compaction on given SSTables compactionhistory Print history of compaction compactionstats Print statistics on compactions decommission Decommission the *node I am connecting to* describecluster Print the name, snitch, partitioner and schema version of a cluster describering Shows the token ranges info of a given keyspace disableautocompaction Disable autocompaction for the given keyspace and table disablebackup Disable incremental backup disablebinary Disable native transport (binary protocol) disablegossip Disable gossip (effectively marking the node down) drain Drain the node (stop accepting writes and flush all tables) enableautocompaction Enable autocompaction for the given keyspace and table enablebackup Enable incremental backup enablebinary Reenable native transport (binary protocol) enablegossip Reenable gossip flush Flush one or more tables getendpoints Print the end points that owns the key getlogginglevels Get the runtime logging levels getsstables Print the sstable filenames that own the key gettraceprobability Print the current trace probability value gossipinfo Shows the gossip information for the cluster help Display help information info Print node information (uptime, load, ...) listsnapshots Lists all the snapshots along with the size on disk and true size. move Move node on the token ring to a new token netstats Print network information on provided host (connecting node by default) proxyhistograms Print statistic histograms for network operations rebuild Rebuild data by streaming from other nodes (similarly to bootstrap) refresh Load newly placed SSTables to the system without restart removenode Show status of current node removal, force completion of pending removal or remove provided ID repair Repair one or more tables resetlocalschema Reset node's local schema and resync ring Print information about the token ring scrub Scrub (rebuild sstables for) one or more tables setlogginglevel Set the log level threshold for a given class. If both class and level are empty/null, it will reset to the initial configuration settraceprobability Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default snapshot Take a snapshot of specified keyspaces or a snapshot of the specified table sstableinfo Information about sstables per keyspace/table status Print cluster information (state, load, IDs, ...) statusbackup Status of incremental backup statusbinary Status of native transport (binary protocol) statusgossip Status of gossip stop Stop compaction tablehistograms Print statistic histograms for a given table tablestats Print statistics on tables toppartitions Sample and print the most active partitions for a given column family upgradesstables Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) version Print cassandra version viewbuildstatus Show progress of a materialized view build See 'nodetool help <command>' for more information on a specific command.
各機能も同じように実行します。
Apache Cassandraのバージョン確認は、次のコマンドとなります。
$ docker exec -it my_scylla nodetool version ReleaseVersion: 3.0.8
cqlsh
cqlshについては、次の記事で詳細を説明しています。
ただし、Dockerでインストールした場合にエラーは関係ありません。
cqlshは、次のコマンドで起動できます。
cqlsh
Dockerを経由するため、次のようなコマンドで起動します。
docker exec -it コンテナ名 cqlsh
実行した結果、次のように表示されます。
$ docker exec -it my_scylla cqlsh Connected to at 172.17.0.2:9042. [cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4] Use HELP for help. cqlsh>
cqlshが起動できたら、テーブル作成などが可能です。
次の記事では、cqlshを利用したテーブル作成・データ登録を説明しています。
ScyllaDBの場合でも、Apache Cassandraと全く同じ要領で作業可能です。
キースペース作成
CREATE KEYSPACE scylla_sample_keyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
キースペース一覧確認
cqlsh> DESCRIBE keyspaces; scylla_sample_keyspace system system_traces system_schema system_distributed_everywhere system_auth system_distributed
キースペース接続
cqlsh> USE scylla_sample_keyspace; cqlsh:scylla_sample_keyspace>
テーブル作成
cqlsh:scylla_sample_keyspace> CREATE TABLE user (id int PRIMARY KEY, age int, name text); cqlsh:scylla_sample_keyspace>
テーブル一覧確認
cqlsh:scylla_sample_keyspace> DESCRIBE tables; user cqlsh:scylla_sample_keyspace>
テーブル定義確認
cqlsh:scylla_sample_keyspace> DESCRIBE user; CREATE TABLE scylla_sample_keyspace.user ( id int PRIMARY KEY, age int, name text ) WITH bloom_filter_fp_chance = 0.01 AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'} AND comment = '' AND compaction = {'class': 'SizeTieredCompactionStrategy'} AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND crc_check_chance = 1.0 AND dclocal_read_repair_chance = 0.0 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 = '99.0PERCENTILE';
INSERT(データ登録)
cqlsh:scylla_sample_keyspace> INSERT INTO user (id, age, name) VALUES (1, 20, '山田太郎'); cqlsh:scylla_sample_keyspace> INSERT INTO user (id, age, name) VALUES (2, 30, '佐藤次郎'); cqlsh:scylla_sample_keyspace> INSERT INTO user (id, age, name) VALUES (3, 40, '高橋三郎');
SELECT(データ抽出)
cqlsh:scylla_sample_keyspace> SELECT * FROM user; id | age | name ----+-----+---------- 1 | 20 | 山田太郎 2 | 30 | 佐藤次郎 3 | 40 | 高橋三郎 (3 rows)
UPDATE(データ更新)
cqlsh:scylla_sample_keyspace> UPDATE user SET name = '山田さん' WHERE id = 1;
DELETE(データ削除)
cqlsh:scylla_sample_keyspace> DELETE FROM user WHERE id = 3; cqlsh:scylla_sample_keyspace> SELECT * FROM user; id | age | name ----+-----+---------- 1 | 20 | 山田さん 2 | 30 | 佐藤次郎 (2 rows)
以上、DockerによるScyllaDBの動作確認を説明しました。