【Road to Cassandra Day】Cassandra学習環境を準備する

# はじめに

今年、2023年６月１日に、[Cassandra Day](https://www.datastax.com/events/cassandra-day-japan)が日本でも開催されます。
Cassandra Dayは、昨年、ベルリン、ロンドン、アムステルダム、ハノイ、ジャカルタ、ヒューストン、サンタクララ、シアトル、シンガポールでも開催されました。

今回の東京での開催に向けて、Apache Cassandraに関する記事を発表していきます。

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/6a879803-d135-348b-f815-08be011607fa.png)](https://www.datastax.com/events/cassandra-day-japan)

# Apache Cassandraについて

Apache Cassandraとは、一言でいうなら、オープンソースの分散データベース管理システムです。

他の分散データベース管理システム同様、複数の汎用サーバーを用いて、ひとつのデータベースを構築します（開発などの目的のため、一つのサーバーのみで構成することも可能です）。

ここでは、詳しい説明は割愛し、興味のある方へのご紹介の役割は、公式サイトやWikipediaに譲ります。

https://cassandra.apache.org/_/index.html

https://en.wikipedia.org/wiki/Apache_Cassandra


# Cassandra学習環境を準備する

コンテナテクノロジーの登場によって、分散アーキテクチャーを持つシステムを試験的に利用する環境の構築は、以前に比べて格段に容易になりました。

Apache Cassandraについて、Docker Official Imageが公開されています。

https://hub.docker.com/_/cassandra

Dockerが利用可能になっている（インストールされ、起動されている）ことを前提として、Cassandraの利用方法を見ていきます。

※ここでは、M1 Mac(macOS Monterey 12.6.2)とDocker Desktop(4.17.0)を使った確認結果を紹介します。

コンソールから、以下のコマンドを入力します。

`docker run -d --name my-cassandra cassandra`

次のような出力が確認されるはずです。

```shell
% docker run -d --name my-cassandra cassandra
f83b7d143ba22bd3f95f9c447894f9aee1276366dea327e60c69474648db9657
```

この時点で、Docker Desktopでは、以下のような画面が確認できるでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/a17fa4ec-3a28-a53d-ec1a-2c6b4b0e3bb9.png)

起動状況をログで確認します。コンソール上で、以下のコマンドを入力します。

`docker logs -f my-cassandra`

すると、こんな感じの出力が確認できるはずです。

```
INFO  [main] 2023-05-01 01:08:41,106 CassandraDaemon.java:769 - Startup complete
INFO  [CompactionExecutor:1] 2023-05-01 01:08:41,120 CompactionTask.java:247 - Compacted (b5f16f00-e7bc-11ed-92d1-dd560259ddea) 6 sstables to [/var/lib/cassandra/data/system/local-7ad54392bcdd35a684174e047860b377/nb-7-big,] to level=0.  0.810KiB to 0.659KiB (~81% of original) in 39ms.  Read Throughput = 20.432KiB/s, Write Throughput = 16.637KiB/s, Row Throughput = ~2/s.  6 total partitions merged to 1.  Partition merge counts were {6:1, }. Time spent writing keys = 21ms
INFO  [NonPeriodicTasks:1] 2023-05-01 01:08:41,121 SSTable.java:127 - Deleting sstable: /var/lib/cassandra/data/system/local-7ad54392bcdd35a684174e047860b377/nb-6-big
INFO  [NonPeriodicTasks:1] 2023-05-01 01:08:41,122 SSTable.java:127 - Deleting sstable: /var/lib/cassandra/data/system/local-7ad54392bcdd35a684174e047860b377/nb-3-big
INFO  [NonPeriodicTasks:1] 2023-05-01 01:08:41,123 SSTable.java:127 - Deleting sstable: /var/lib/cassandra/data/system/local-7ad54392bcdd35a684174e047860b377/nb-2-big
INFO  [NonPeriodicTasks:1] 2023-05-01 01:08:41,124 SSTable.java:127 - Deleting sstable: /var/lib/cassandra/data/system/local-7ad54392bcdd35a684174e047860b377/nb-4-big
INFO  [NonPeriodicTasks:1] 2023-05-01 01:08:41,124 SSTable.java:127 - Deleting sstable: /var/lib/cassandra/data/system/local-7ad54392bcdd35a684174e047860b377/nb-5-big
INFO  [NonPeriodicTasks:1] 2023-05-01 01:08:41,125 SSTable.java:127 - Deleting sstable: /var/lib/cassandra/data/system/local-7ad54392bcdd35a684174e047860b377/nb-1-big
INFO  [OptionalTasks:1] 2023-05-01 01:08:51,196 CassandraRoleManager.java:354 - Created default superuser role 'cassandra'
```


上記引用１行目のように、`Startup complete`という文言が出力されているのを確認します。
そしたら、次に以下のコマンドを実行します（その前に、Ctrl+Cを入力してログ出力を止めるか、別のコンソールを利用します）。

`docker exec -it my-cassandra cqlsh`

以下のような、コマンドプロンプトが出力されます。

```
% docker exec -it my-cassandra cqlsh
Connected to Test Cluster at 127.0.0.1:9042
[cqlsh 6.1.0 | Cassandra 4.1.0 | CQL spec 3.4.6 | Native protocol v5]
Use HELP for help.
cqlsh> 
```
この段階で、データベースは初期状態ですが、次のコマンドでデフォルトの状態を確認してみます。

`desc keyspaces`

次のように、システム関連の出力が確認できます。

```
cqlsh> desc keyspaces

system       system_distributed  system_traces  system_virtual_schema
system_auth  system_schema       system_views 

cqlsh> 
```

`cqlsh`コマンドプロンプトから抜けるには、`exit`サブコマンドを実行します。

```
cqlsh> exit
%
```

# 最後に

これで、（本稿タイトルである）「Cassandra学習環境を準備する」ことができました。

（今回は説明抜きに手順のみ提示したCQLの利用方法など）さらに学習を進めるための情報、そして、そもそもApache Cassandraとはどんなデータベースなのか、あるいは、（今回は最も単純な形で環境を準備しましたが）より実践的な環境構築の方法など、今後、別の記事として発表していきたいと思います。