国産インメモリデータベース 劔"Tsurugi" をインストールします。
(デジタル赤字解消だ!)
ちょっと前から聞こえてきていたのですが、インメモリ/メニーコア環境で世界最速を謳う国産リレーショナルデータベース(RDBMS)の「劔"Tsurugi"」てのが開発されているとのこと。
劔"Tsurugi"
どうやら剣岳から命名されたようですね。
(後で丹沢とかでてきますし間違いないでしょう)
日本のIT界隈では海外の製品やサービスばかり使うものだから「デジタル赤字」が問題になりつつありますし、それの解消や国内ITのレベルアップのためにも、国産物を優遇して育てていかなきゃなりません。
劔"Tsurugi"はできたばかりでまだまだ商用の環境で使う訳にはいかないでしょうけど、応援すべくここで取り上げることにしました。
詳細は上記のリンクに色々と書いてありますから、そちらを読んでみて下さい。
1.環境
Ubuntuで動くそうなんで Ubuntu Server 24.04を用意しました。
結構色々とパッケージをインストールしますから他との相乗りはさせないで仮想OSを一つ用意するのが良さげです。
Ubuntu Server 24.04のインストールについては「Ubuntu 24.04 Server インストール」に書いていまして、その手順で作った仮想OSで以降の作業をやっていきます。
2.ダウンロード
以下からダウンロードできます。Githubのリポジトリですね。
2025年3月22日時点での最新版は 1.3.0 です。
project-tsurugi / tsurugidb
curlコマンドを使用したダウンロード手順がかかれていましたので、その通り実行します。
本当は [tsurugi]ユーザーを作ってそれでやった方が実践的な設計なんでしょうけど、作業の本質ではないので [subro]ユーザーでやってしまいます。
(これからの作業は sudoできるユーザーでないといけません。)
[subro]ユーザーのホームディレクトリにダウンロードします。
subro@UbuntuServer2404-1:~$ curl -OL https://github.com/project-tsurugi/tsurugidb/releases/download/1.3.0/tsurugidb-1.3.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 22.0M 100 22.0M 0 0 7407k 0 0:00:03 0:00:03 --:--:-- 9564k
subro@UbuntuServer2404-1:~$ ls -l tsurugidb-1.3.0.tar.gz
-rw-rw-r-- 1 subro subro 23101635 3月 22 08:16 tsurugidb-1.3.0.tar.gz
[tsurugidb-1.3.0.tar.gz] というファイルができました。
3.ビルドとインストール
次の手順はこちらにかいてあります。
国産だけに日本語マニュアルがちゃんとあります。
Tsurugi Getting Started (日本語)
手順を見ていくと、どうやらダウンロードをしたのは実行ファイルではなくソースファイルのようで、自分でビルドしないといけないようです。
でもスクリプトが用意されているのでそれを実行するだけです。
ダウンロードした圧縮ファイルを解凍・展開します。
subro@UbuntuServer2404-1:~$ tar xf tsurugidb-1.3.0.tar.gz
subro@UbuntuServer2404-1:~$ ls -l tsurugidb*
-rw-rw-r-- 1 subro subro 23101635 3月 22 08:16 tsurugidb-1.3.0.tar.gz
tsurugidb-1.3.0:
合計 108
-rw-r--r-- 1 subro subro 2460 3月 17 10:59 BUILDINFO.md
-rwxr-xr-x 1 subro subro 11357 3月 17 10:57 LICENSE
-rw-r--r-- 1 subro subro 3905 3月 17 10:57 README.md
-rw-r--r-- 1 subro subro 8712 3月 17 10:57 about.md
-rwxr-xr-x 1 subro subro 107 3月 17 10:57 apt-install.sh
drwxr-xr-x 4 subro subro 4096 3月 17 10:57 dist
drwxr-xr-x 2 subro subro 4096 3月 17 10:57 docs
drwxr-xr-x 6 subro subro 4096 3月 17 10:57 harinoki
-rwxr-xr-x 1 subro subro 103 3月 17 10:57 install.sh
drwxr-xr-x 14 subro subro 4096 3月 17 10:57 jogasaki
drwxr-xr-x 11 subro subro 4096 3月 17 10:57 limestone
drwxr-xr-x 10 subro subro 4096 3月 17 10:58 mizugaki
drwxr-xr-x 13 subro subro 4096 3月 17 10:58 ogawayama
drwxr-xr-x 14 subro subro 4096 3月 17 10:58 sharksfin
drwxr-xr-x 13 subro subro 4096 3月 17 10:58 shirakami
drwxr-xr-x 10 subro subro 4096 3月 17 10:58 takatori
drwxr-xr-x 6 subro subro 4096 3月 17 10:58 tanzawa
drwxr-xr-x 14 subro subro 4096 3月 17 10:58 tateyama
drwxr-xr-x 8 subro subro 4096 3月 17 10:58 tateyama-bootstrap
drwxr-xr-x 4 subro subro 4096 3月 17 10:57 third_party
drwxr-xr-x 6 subro subro 4096 3月 17 10:58 tsubakuro
drwxr-xr-x 11 subro subro 4096 3月 17 10:58 yakushima
drwxr-xr-x 9 subro subro 4096 3月 17 10:59 yugawara
[tsurugidb-1.3.0]ディレクトリ以下にこんな風に展開されています。
やっぱり山関係なのかな。
必要な外部ライブラリ等のパッケージをインストールします。
[tsurugidb-1.3.0]ディレクトリに移動し、展開したファイル群から [apt-install.sh]を実行しています。
subro@UbuntuServer2404-1:~$ cd tsurugidb-1.3.0
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ sudo ./apt-install.sh
〜〜〜 長いので省略 〜〜〜
apt-install.sh successful.
問題なく完了しました。
ビルド(コンパイルして実行ファイルを作る)をします。
結構時間がかかります。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ mkdir $HOME/opt
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ ./install.sh --prefix=$HOME/opt --symbolic
〜〜〜 長いので省略 〜〜〜
------------------------------------
[Install Tsurugi successful]
Install Directory: /home/subro/opt/tsurugi-1.3.0
------------------------------------
上手くいったようです。
4.コマンドラインからのアクセス
ここからの手順はコマンドラインから SQLを実行するツールの tgctlコマンドの使用に移っていきます。
ここではローカル接続で、ネットワーク越しの方法は後述しています。
[TSURUGI_HOME]環境変数があることが前提になっていますので、まずこれを設定しておきましょう。
この方法だと設定が永続しないので、[~/.bashrc]ファイルなんかに書いておくのが本当は良いですね。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ export TSURUGI_HOME="$HOME/opt/tsurugi"
劔を起動します。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl start
successfully launched tsurugidb.
立ち上がりました。
劔の状態確認。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl status
Tsurugi OLTP database is RUNNING
手順と同じメッセージを得られているので、これで良いのでしょう。
手順に従って停止もやってみます。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl shutdown
.
successfully shutdown tsurugidb.
こちらも手順通り。
このあと再び立ち上げました。
次はいよいよ SQLの実行です。
手順にあるローカル環境でしか使えないけど高速な IPC接続でアクセスします。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgsql -c ipc:tsurugi
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - establishing connection: ipc:tsurugi
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - start repl
tgsql>
行頭の「tgsql>」が tgctlコマンドの SQL実行プロンプトです。
手順にある SQLを実行していきます。
トランザクションの開始。
tgsql> BEGIN;
transaction started. option=[
type: OCC
]
Time: 21.885 ms
テーブル作成
tgsql> CREATE TABLE tb1(pk INT PRIMARY KEY, c1 INT);
execute succeeded
Time: 18.07 ms
データ挿入。
tgsql> INSERT INTO tb1(pk, c1) VALUES(1,100);
(1 row inserted)
Time: 3.071 ms
データ検索。
tgsql> SELECT * FROM tb1;
[pk: INT4, c1: INT4]
[1, 100]
(1 row)
Time: 16.002 ms
コミット(データの変更を反映してトランザクションの終了)。
tgsql> COMMIT;
transaction commit(DEFAULT) finished.
Time: 5.723 ms
プロンプトから抜ける。
tgsql> \quit
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - repl execution was successfully completed
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$
これで手順は終了しています。
他の RDBMSを使ったことのある人なら、これまでの知識の応用で十分使えるなって思ったんじゃないでしょうか。
5.他ノードでのコマンドラインでのアクセス(TANZAWA)
多分ね〜神奈川県の丹沢のことだと思います。
Javaで作られているようで、こちらもビルドからやらないといけないらしく、JDK11以上が必要となっています。
project-tsurugi /tanzawa
この中からSQLを実行できるツールの tgsqlコマンドを作ろうと思います。
なお劔のデフォルト設定では外部ノードからのネットワーク接続機能が無効にされていますので、先にこれを有効にしておきます。
劔を停止します。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl shutdown
.
successfully shutdown tsurugidb.
具体的には設定ファイル($TSURUGI_HOME/var/etc/tsurugi.ini)を更新するんですが、このファイルに記載するパラメータの一覧はこちらです。
Configuration file parameters (のstream_endpoint sectionの段落)
以下のように変えます。
[stream_endpoint]
#allow_blob_privileged=false
#enabled=false
#port=12345
#threads=104
↓
[stream_endpoint]
#allow_blob_privileged=false
enabled=true ← 行頭の # を消しています。
#port=12345
#threads=104
劔を立ち上げます。
subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl start
successfully launched tsurugidb.
立ち上がりました。
デフォルトでは [12345/tcp] で待ち受けているはずです。
subro@UbuntuServer2404-1:~$ sudo ss -atp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.54:domain 0.0.0.0:* users:(("systemd-resolve",pid=700,fd=17))
LISTEN 0 4096 0.0.0.0:12345 0.0.0.0:* users:(("tsurugidb",pid=1915,fd=8))
LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:* users:(("systemd-resolve",pid=700,fd=15))
LISTEN 0 4096 *:ssh *:* users:(("sshd",pid=1339,fd=3),("systemd",pid=1,fd=98))
ESTAB 0 52 [::ffff:192.168.1.103]:ssh [::ffff:192.168.1.102]:41482 users:(("sshd",pid=1455,fd=4),("sshd",pid=1341,fd=4))
どうやらサーバー側はこれで良いようです。
次はクライアント側です。
私が普段遣いしている Lubuntu 24.04でやってみます。
丹沢のGitリポジトリをクローンします。
subro@Lubuntu2404:~/work/tsurugi$ git clone https://github.com/project-tsurugi/tanzawa.git
Cloning into 'tanzawa'...
remote: Enumerating objects: 6116, done.
remote: Counting objects: 100% (743/743), done.
remote: Compressing objects: 100% (424/424), done.
remote: Total 6116 (delta 290), reused 473 (delta 179), pack-reused 5373 (from 1)
Receiving objects: 100% (6116/6116), 1.21 MiB | 9.96 MiB/s, done.
Resolving deltas: 100% (2489/2489), done.
subro@Lubuntu2404:~/work/tsurugi$
subro@Lubuntu2404:~/work/tsurugi$ ls -l
合計 4
drwxrwxr-x 8 subro subro 4096 3月 22 09:28 tanzawa
[tanzawa]ディレクトリができましたので、そこに移動して内容を見てみます。
subro@Lubuntu2404:~/work/tsurugi$ cd tanzawa
subro@Lubuntu2404:~/work/tsurugi/tanzawa$ ls -l
合計 80
drwxrwxr-x 8 subro subro 4096 3月 22 17:29 ./
drwxrwxr-x 3 subro subro 4096 3月 22 17:29 ../
drwxrwxr-x 8 subro subro 4096 3月 22 17:29 .git/
-rw-rw-r-- 1 subro subro 44 3月 22 17:29 .gitattributes
drwxrwxr-x 3 subro subro 4096 3月 22 17:29 .github/
-rw-rw-r-- 1 subro subro 241 3月 22 17:29 .gitignore
-rw-rw-r-- 1 subro subro 11357 3月 22 17:29 LICENSE
-rw-rw-r-- 1 subro subro 1031 3月 22 17:29 README.md
-rw-rw-r-- 1 subro subro 38 3月 22 17:29 build.gradle
drwxrwxr-x 3 subro subro 4096 3月 22 17:29 buildSrc/
drwxrwxr-x 2 subro subro 4096 3月 22 17:29 docs/
drwxrwxr-x 3 subro subro 4096 3月 22 17:29 gradle/
-rwxrwxr-x 1 subro subro 8639 3月 22 17:29 gradlew*
-rw-rw-r-- 1 subro subro 2868 3月 22 17:29 gradlew.bat
drwxrwxr-x 5 subro subro 4096 3月 22 17:29 modules/
-rw-rw-r-- 1 subro subro 853 3月 22 17:29 settings.gradle
gradleってビルドツールを使ってんですね。
以下の手順に従って tgsqlコマンドをビルドします。
Tsurugi SQL console
[./modules/tgsql]ディレクトリに移ってから、ビルドコマンドを実行します。
subro@Lubuntu2404:~/work/tsurugi/tanzawa$ cd modules/tgsql
subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql$ ls -l
合計 20
-rw-rw-r-- 1 subro subro 5341 3月 22 17:29 README.md
drwxrwxr-x 4 subro subro 4096 3月 22 17:37 cli
drwxrwxr-x 4 subro subro 4096 3月 22 17:37 core
drwxrwxr-x 2 subro subro 4096 3月 22 17:29 docs
subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql$ ../../gradlew assemble
〜〜〜 省略 〜〜〜
BUILD SUCCESSFUL in 13s
31 actionable tasks: 31 executed
やや警告は出ましたが動作には問題ないようです。
[./cli/build/distributions]ディレクトリに移ります。
subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql$ cd cli/build/distributions
subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions$ ls -l
合計 39376
-rw-rw-r-- 1 subro subro 10054351 3月 22 17:37 tgsql-1.9.0-SNAPSHOT-shadow.tar.gz
-rw-rw-r-- 1 subro subro 10055025 3月 22 17:37 tgsql-1.9.0-SNAPSHOT-shadow.zip
-rw-rw-r-- 1 subro subro 10101142 3月 22 17:37 tgsql-1.9.0-SNAPSHOT.tar.gz
-rw-rw-r-- 1 subro subro 10103773 3月 22 17:37 tgsql-1.9.0-SNAPSHOT.zip
圧縮形態が違うだけで無印とshadowという2種のセットができていました。
shadowの方は関連の jarファイル群を 1つの jarファイルに纏めたもののようです。
ここは shadowの方を使ってみます。
[tgsql-1.9.0-SNAPSHOT-shadow.zip]ファイルを解凍・展開します。
ubro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions$ unzip tgsql-1.9.0-SNAPSHOT-shadow.zip
Archive: tgsql-1.9.0-SNAPSHOT-shadow.zip
creating: tgsql-1.9.0-SNAPSHOT-shadow/
creating: tgsql-1.9.0-SNAPSHOT-shadow/lib/
inflating: tgsql-1.9.0-SNAPSHOT-shadow/lib/tgsql-1.9.0-SNAPSHOT-all.jar
creating: tgsql-1.9.0-SNAPSHOT-shadow/bin/
inflating: tgsql-1.9.0-SNAPSHOT-shadow/bin/tgsql.bat
inflating: tgsql-1.9.0-SNAPSHOT-shadow/bin/tgsql
展開後の [bin]ディレクトリに移ります。
ubro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions$ cd tgsql-1.9.0-SNAPSHOT-shadow/bin
subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions/tgsql-1.9.0-SNAPSHOT-shadow/bin$ ls -l
合計 12
-rwxr-xr-x 1 subro subro 5656 3月 22 17:37 tgsql
-rwxr-xr-x 1 subro subro 2172 3月 22 17:37 tgsql.bat
やっと tgsqlコマンドにたどり着きました。
実態はシェルスクリプトで、中で javaを実行していますね。
[tgsql.bat]は Windows用のバッチスクリプトです。
いよいよネットワーク越しに劔に接続してみます。
subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions/tgsql-1.9.0-SNAPSHOT-shadow/bin$ ./tgsql -c tcp://UbuntuServer2404-1:12345
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - establishing connection: tcp://UbuntuServer2404-1:12345
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - start repl
tgsql> select * from tb1;
start transaction implicitly. option=[
type: OCC
label: "tgsql-implicit-transaction2025-03-22 17:59:55.209+09:00"
]
Time: 1.079 ms
[pk: INT4, c1: INT4]
[1, 100]
(1 row)
Time: 32.639 ms
transaction commit(DEFAULT) finished implicitly.
Time: 6.027 ms
先にサーバー側で作っていた [tb1]テーブルの検索ができました。\(^o^)/
==========
とりあえずこれで劔"Tsurugi"の触りは OKかと思います。
現在は JavaAPI(但しJDBCではない)や WebAPIがあり、またGUIベースの管理ツールもあるようです。
まだ各種開発言語用のドライバが全然無いのですが、これから開発されていくものと思われます。
私も触れたばかりなので、DBサーバーとしての運用管理に伴う技術については全く知らんのですが、Production環境での利用を想定しているのですから、当然そこも開発されているのだと思います。
まだまだ生まれたばかりで仕事でこれを使う機会に出会うか不明ながら、久々の国産物なので頑張って欲しいですね。
2023年10月5日刊で既に書籍が出ています。