PlanetScaleからTiDB Serverlessへ乗り換えてみる
NextJSのチュートリアルをやっており、その中でPlanetScaleを使っていた。
が、周知の通り2023 4/8からPlanetScale有料化となるので、とりあえずDB移行をばと
ザっと調べた感じ + 前から興味あったTiDBがServerlessで従量課金休めの提供してるっぽいので試してみようかと思った
その作業ログ
TiDB Cloudアカウント作成
とりあえずアカウント作成
GithubでSignupしたよ
適当にアンケートに回答したら、Dashboardへ遷移する
作成時点で、既にServerless Clusterが1つ作られてる
料金とか
TiDB Severlessは5クラスターまで無料で作成可能
無料のクォータ
各組織で作成された5つのクラスタを無料で使用することができます。6つ目のクラスタを作成する場合は、クレジットカードを追加し、使用限度額を設定する必要があります。6つ目のクラスタを作成する前に、既に作成したクラスタをいくつか削除した場合、新しいクラスタは無料枠のクラスタとカウントされ無料となります。
上記の条件を満たしたTiDB Serverlessのクラスタに対して、毎月フリークォータが発行されます。無料枠を利用することで、お客様は1ヶ月間、行ベースのデータ5GiBと列ベースのデータ5GiBを同時に保存し、5,000万RUを消費することができます。これらのクォータを自由に割り当てて、同等の運用を実現することも可能です。
クラスタ毎に5GiBストレージと5000万RU = 合計1アカウントあたり25GiBストレージと25,000万RU無料で使えるってことでよいのかな?
クラスタが使用限度額を設定していない場合、デフォルトでは、このクラスタの読み込みおよび書き込み操作は100RU/秒にスロットルされます。行ベースのストレージが5GiBに達するか、列ベースのストレージが5GiBに達するか、またはクラスタの無料クォータが月内に使い果たされるかのいずれかで、クラスタは自動的に10RU/秒にスロットルされます。この制限は、お客様が0を超える使用限度額を設定するか、翌月まで維持されます。
RU超えたりしても、完全に使えなくなるわけではなく低速では使えそう
個人開発アプリ規模だと難しいかもだけど、チュートリアルアプリとかだと十分かも?
PrismaとNextJSでアクセスする
前提として、既にprisma initしてプロジェクトセットアップしており、別のDBに登録用のschemaとかあるとするよ
TiDB Cloudでアクセス用のコネクションストリング確認する
Cluserを選択して
右上のConnect
を選択
Connect WithでPrisma
を選んで、Generate Password
を実行(↑の画像はそれ実行済み)
生成されたConnection String = mysql://...
をコピーしておく
NextJSの環境変数変更
自分のプロジェクトでは、.env
でDATABASE_URL
という環境変数で設定している
こちらを前ステップでコピーしたConnection Stringに置き換える
schema情報などをpush
マイグレーションするほど、まだDBを作りこんでなかったのでシンプルにdb pushする
$ npx prisma db push
確認
$ npx prisma studio
で問題なくテーブルとかできてるか確認
これで、その後アプリでつなげても問題なく動いた