以前、仕事中の負荷テスト時の調べ物でCockroachDBなるものを知ったので、試しにCentOS 7に入れてみることにする。
CockroachDBはいわゆるNewSQLと呼ばれるDBで、NoSQLでトランザクションをできるようにしたものだと覚えておけばよいだろう。特にこのCockroachDBは分散KeyValueStoreで、データを分散して保存させることに力を入れているらしい。データベース内の操作はSQLで行えるので、RDBMSからの移行も比較的簡単に行えるだろう。
現時点(2016/05時点)ではまだBeta版のようなので本番導入はちょっとどうかと思うが、面白い代物だと思う。
なお、ロゴ見てもらえりゃわかると思うけど、Cockroachってまぁゴキさんです。
火星にいるあいつです(違う)。
1.インストール
インストール方法については、ソースからやバイナリをそのまま、もしくはDockerでの動作を選択できるようだ。
とりあえず、今回はバイナリからインストールを行う。
以下のコマンドで、最新版のバイナリをダウンロードする。
curl -s https://www.cockroachlabs.com/docs/install-cockroachdb.html | grep 'CockroachDB tarball for Linux' | awk -F\" '{print $2}' | xargs wget
バイナリのアーカイブファイルをダウンロードしたら、以下のコマンドで展開、実行ファイルをコピーする。
tar xzvf cockroach-beta-*.tgz
cp cockroach-beta-20160505.linux-amd64/cockroach /usr/bin/
これでインストールは完了となる。
2.起動・接続
さて、それでは実際に起動・接続してみよう。
まず、以下のコマンドでバックグラウンド実行する。
cockroach start --background
[root@BS-PUB-CENT7-02 ~]# cockroach start --background
build: beta-20160505 @ 2016/05/05 15:41:00 (go1.6)
admin: http://localhost:8080
sql: postgresql://root@localhost:26257?sslmode=disable
logs: cockroach-data/logs
store[0]: path=cockroach-data
インスタンスを複数立ち上げる場合は、2つ目以降は以下のようにコマンドを実行してやれば良いようだ。
cockroach start --store=データストア名 --port=ポート番号(DB) --http-port=ポート番号(http) --join=localhost:26257 --background
さて、これでCockroachDBは起動出来たので、接続してデータベース・テーブルを作成してみよう。
CockroachDBのクライアントは、同じバイナリでサブコマンドとして「sql」を付与すれば良い。
cockroach sql
[root@BS-PUB-CENT7-02 ~]# cockroach sql
# Welcome to the cockroach SQL interface.
# All statements must be terminated by a semicolon.
# To exit: CTRL + D.
root@:26257> CREATE DATABASE test;
CREATE DATABASE
root@:26257> SET DATABASE = test;
SET
root@:26257> CREATE TABLE test (id INT PRIMARY KEY, value DECIMAL);
CREATE TABLE
root@:26257> INSERT INTO test VALUES (1111, DECIMAL '912.234');
INSERT 1
root@:26257> INSERT INTO test VALUES (1112, DECIMAL '9432.134');
INSERT 1
root@:26257> SELECT * FROM test;
+------+----------+
| id | value |
+------+----------+
| 1111 | 912.234 |
| 1112 | 9432.134 |
+------+----------+
ふむぅ…特に違和感なく操作出来る。
ただまぁ、分散方式に力が入っているとのことなので、クラスタにしてみないとなんとも判断出来ないかな。