NoSQLのCassandraをRDBのPostgreSQL感覚で触ってみた

こんにちは。技術部の髙岡です。

NoSQLのCassandraを初めて触ってみました。
RDBの経験はあるのですが、NoSQLを触ってみたのも初めてです。

CassandraやNoSQLについての説明はいろんなところに書いてあるので、記載しません。
ここではRDBのPostgreSQL感覚でCassandraを触るとどうかという観点で、Cassandraを簡単に検証した結果を書いてみたいと思います。Bigなデータを扱うに相応いのでしょうか?

導入

社内の検証用の仮想マシンを使いました。
とりあえず触ってみたいだけなので、1ノード構成です。

CPU:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
メモリ:1G
OS:CentOS 7.5

インストールはとても簡単でした。
yumのリポジトリにcassandraを手動で追加して、以下の2行を実行するだけ。

cassandra-3.11.4-1をインストールしました。

起動停止もこれだけです。

各種のパラメータはデフォルトのままです。

テーブル作成、挿入、更新

まずは、ログインしてみます。
PostgreSQLのpsqlなんかと同じ感覚でした。

最初にキースペースを作成します。

作成できたかどうかを確認します。

キースペースに接続します。

テーブルを作成して、データを挿入、検索、更新、削除してみます。
ここで使っているコマンドはSQLと同じですが、CQLというcassandra独自のコマンドです。

全件削除はできないようです。

ここままでは、特に違和感がありませんでした。
しかし、この後説明する大量のデータロード、大量のデータ検索を実施したところ、RDB感覚では違和感を覚えたのです。

大量データのロードと検索

100万件のCSVを作成し、cassandraにCSVデータをロードしてみました。

CSVデータをロードするコマンドとして、PostgreSQLのCOPYコマンドそっくりのコマンドがありました。

エラーが出ました。
なぜ、int型で定義した列に、文字型のデータが挿入されようとしているのでしょうか?
csvは、

1,”ttakaoka1″,80

の順番で記載してるので、列の定義順と同じ筈です。

テーブルは、

で作成したのです。

そこでテーブルの定義を調べてみました。
DESCRIBEという、どっかの商用DBにありそうな便利なコマンドがありました。

理由はわからないのですが、
CREATE TABLEで指定した
「empno int, ename text, deptno int」
の順でなく、
「empno int, deptno int, ename text」
の順で列が定義されていました。

理由はさておき、COPYコマンドで列の順番を指定して、再びロードしてみました。

なんと、28秒もかかりました!
同じことをPostgreSQLで実行すると3秒程度で終わったので、正直驚きました。

PostgreSQLでの実行結果

次に、ロードした100万件の行を検索してみました。

まずは、特定の1行の検索です。

1行目から10行目までのtimestampを見ると、2秒位で終わっています。
若干遅いと思いました。

遅いと思った理由は、同じことをPostgreSQLで実行しても1秒未満だったためです。

PostgreSQLでの実行結果

次に、件数をカウントしてみました。

なんと、約30秒もかかってしまうではないですか!
同じことを、PostgreSQLで実行すると、1秒未満で終わったのです。

Cassandraのパラメータはデフォルトのままです。
ノードも一台だけなので、Cassandraのパワーを活かしきれていないのでしょうか。
どうすれば早くなるのかは、この後で調査・検証したいと思います。

ハマったこと

実は、全件の件数をカウントするSELECT文を実行したところ、最初はエラーが出まくって、なかなか成功しなかったのです。

出力されたエラーメッセージの例

のような諸々エラーが出て、なかなか成功しませんでした。

ググってみると、大量データのカウントで時間がかかるクエリーを実行して同じような目に会っている事例が結構ありました。
いくつかのパラメータを調整してやっと成功するようになったのですが、調整した内容は次回のブログで整理して皆さんに報告したいと思います。

それにしても、時間がかかるクエリーを実行するとエラーが出るなんて、ひどいですね。。

課題

大量データの件数カウントのようなクエリーが遅かった原因を調査して、解決策が見つかったら検証してみたいと思います。

>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*