TiDB CloudのServerlessでブランチ機能が追加されていたため触ってみた

2024.01.31

こんにちは、ゲームソリューション部のsoraです。
今回は、TiDB CloudのServerlessでブランチ機能が追加されていたため触ってみたことについて書いていきます。

ブランチ機能とは

ブランチ機能は、2023年7月にTiDB CloudのServerlessにてベータ版として追加された機能です。
現状ではベータ版であり無料で利用できます。
TiDB サーバーレス ブランチング (ベータ版) の概要

簡単に言うと、クラスタ上の本番データを別ブランチにコピーしてテストできる機能のようです。
データは分離されているため、別ブランチにて追加したデータは、mainブランチには反映されません。
ブランチ作成時のクラスタのパフォーマンスへの影響については、以下記載がありました。

迅速かつシームレスなブランチ作成を保証するために、TiDB サーバーレスはコピーオンライト技術を使用して、元のクラスターとそのブランチの間でデータを共有します。このプロセスは通常、数分以内に完了し、ユーザーには気づかれないため、元のクラスターのパフォーマンスには影響しません。

引用:TiDB サーバーレス ブランチング (ベータ版) の概要

ブランチの作成

早速ブランチを作成してみます。
TiDB CloudのServerlessクラスタのBranchesから作成することができます。
ブランチ名だけ指定して作成します。


接続して触ってみる

ブランチを作成したため、接続してみます。
まずはmainブランチに接続してデータを確認します。

$ mysql --comments -u '{mainブランチのユーザ名}' -h gateway01.ap-northeast-1.prod.aws.tidbcloud.com -P 4000 -D 'test' --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/pki/tls/certs/ca-bundle.crt -p'{mainブランチのパスワード}'

クラスタは作成してデフォルトのままのため、デフォルトで存在するmainブランチには初期状態のデータしか存在しません。

mysql>SHOW databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)


次に作成したdevブランチへ接続して、データを追加してみます。
クラスタへの接続情報を表示する画面で、追加したブランチを選択することができます。

$ mysql --comments -u '{devブランチのユーザ名}' -h gateway01.ap-northeast-1.prod.aws.tidbcloud.com -P 4000 -D 'test' --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/pki/tls/certs/ca-bundle.crt -p'{devブランチのパスワード}'

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.01 sec)

mysql> CREATE DATABASE branch_test;
Query OK, 0 rows affected (0.11 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| branch_test        |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.01 sec)

mysql> USE branch_test;
Database changed

mysql> CREATE TABLE prefectures (prefecture TEXT, prefectural_capital TEXT, area TEXT, PRIMARY KEY (prefecture(255)));
Query OK, 0 rows affected (0.11 sec)

mysql>
mysql>
mysql> SHOW tables;
+-----------------------+
| Tables_in_branch_test |
+-----------------------+
| prefectures           |
+-----------------------+
1 row in set (0.01 sec)

mysql> DESCRIBE prefectures;
+---------------------+------+------+------+---------+-------+
| Field               | Type | Null | Key  | Default | Extra |
+---------------------+------+------+------+---------+-------+
| prefecture          | text | NO   | PRI  | NULL    |       |
| prefectural_capital | text | YES  |      | NULL    |       |
| area                | text | YES  |      | NULL    |       |
+---------------------+------+------+------+---------+-------+
3 rows in set (0.01 sec)

mysql> INSERT INTO prefectures(prefecture,prefectural_capital,area) VALUES ('Hokkaido','Sapporo','Hokkaido');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM prefectures;
+------------+---------------------+----------+
| prefecture | prefectural_capital | area     |
+------------+---------------------+----------+
| Hokkaido   | Sapporo             | Hokkaido |
+------------+---------------------+----------+
1 row in set (0.03 sec)


devブランチでデータを追加した後、mainブランチでデータを確認してみると、devブランチで追加したデータが追加されていないことが確認できます。

mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

最後に

今回は、TiDB CloudのServerlessでブランチ機能が追加されていたため触ってみたことを記事にしました。
どなたかの参考になると幸いです。