TL;DR
ローカルの SpringBoot アプリケーションで TiDB を使ってみた。
はじめに
TiDB は、MySQL 互換の NewSQL データベースで、昨今いろんな企業が導入しているらしい。
- https://pingcap.co.jp/case-study/
- https://www.publickey1.jp/blog/24/newsqltidbpr.html
- https://speakerdeck.com/leveragestech/tidb-user-day-tidbhayin-nodan-wan-ninarunoka-rehatetukunoke-ti-toxin-tanatiao-zhan-tidb-user-day-2024
私が TiDB を知ったのは ServerlessDays Tokyo 2023 のセッションなので 1 年前になるが、今回重い腰を上げて使ってみた。
TiDB の準備
登録
以下にアクセスし、右上の 無料ではじめる
から登録できる。
必要事項を入力したら、さっそくクラスターが作られている状態になる。
必要なものをもろもろ作成する
データベースやユーザーなどを作成する。
左のタブから SQL Editor
を開き、MySQL のコマンドを使用して作成した。
MySQL コマンドの参考になりそうなものを載せておく。
- https://prog-8.com/docs/mysql-database-setup
- https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql-ja
SpringBoot の設定
MySQL に接続できる設定であれば良い。
開発段階では、MySQL の Docker イメージを使っている。
ローカルで TiDB を起動する方法もあるらしいが、面倒くさいのでやっていない。
ローカル起動を試したい方は以下を参考に。
https://zenn.dev/koiping/articles/01f62e77d047e6
依存関係
Gradle の例なので、Maven の場合は読み替えてほしい。
また、Flyway を使用しているため、Flyway の依存関係も載せている。
dependencies {
implementation("org.springframework.boot:spring-boot-starter-jdbc")
runtimeOnly("com.mysql:mysql-connector-j")
runtimeOnly("org.flywaydb:flyway-core:10.18.0")
runtimeOnly("org.flywaydb:flyway-mysql:10.18.0")
}
プロパティ
spring:
datasource:
url: jdbc:mysql://[HOST]:[PORT]/[DATABASE]
username: [USERNAME]
password: [PASSWORD]
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 2
maximum-pool-size: 5
ローカルで MySQL に接続したアプリケーションが開発できれば準備完了。
SpringBoot から TiDB に接続
TiDB の画面で、クラスターの Overview ページが開いている状態にする。
右上の Connect
を押すと、以下のように接続情報が表示される。
HOST
, PORT
は先ほどのプロパティにそのまま入れる。
USERNAME
, PASSWORD
, DATABASE
は、ここで作成したものをプロパティに入れる。
プロパティを直接書き直すのではなく、環境変数で設定したっていい。
https://github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0
結論、プロパティをローカルの MySQL から TiDB のものに書き換えるだけで良い。
まとめ
本当に MySQL 互換だった。