PlanetScale入門
PlanetScaleとは
公式サイトにはこう書かれています
PlanetScale is the world’s most advanced serverless MySQL platform
Google翻訳:
PlanetScale は、世界で最も先進的なサーバーレス MySQL プラットフォームです
いきなりですが 使ってみての感想
私は PlanetScale を使ってみてこのような体験をすることができました
- 開発ブランチから本番ブランチへのスキーマ変更が簡単(デプロイが簡単)
- デプロイの差分が GitHub と同じような見え方で直感的でわかりやすい
- Amazon RDS と比較してWebコンソールの使いやすい
- 手動バックアップやスケジュールバックアップの設定が簡単
- DBへの接続方法が言語やツールごとに説明されている点や、Webコンソールからも接続でき親切さを感じた
特徴
- サーバーレスである
- 水平スケーリングできる
- Vites が基盤であり MySQL 互換である
- スキーマをブランチ管理できる
- スキーマの差分がひと目で分かる など...
公式で Amazon RDS との比較 の記事もありました
料金プラン
料金プランは Hobby Scaler Team の3つあります
今回利用した Hobby は下記のようになっています
ストレージ: 5GB
読み込み/月: 10億回
書き込み/月: 1,000万回
本番ブランチ: 1つ
開発ブランチ: 1つ
同時接続数: 1,000接続
Query insights: 24時間
自動バックアップ: 毎日
Scaler や Team などの有料プランにすると各制限の上限が増えるほか シングルサインオン や 監査ログ の機能が利用できるようです

アカウントの作成
https://auth.planetscale.com/sign-up から SignUp できます
GitHub でも作成できるようですが、今回は Email で作成しました

PlanetScaleの特徴
メールアドレス認証を完了してログインすると PlanetScale の特徴が紹介されます。

Serverless databases
Google翻訳:
MySQL の信頼性とオープン ソースの Vitess のスケールを備えたフル マネージド データベースをわずか 10 秒でデプロイします。 組み込みの接続プールにより、データベースの接続制限に達することはありません。

PlanetScale’s proprietary Data Branching™ feature
Google翻訳:
データベースをコードのように扱います。 本番データベースを即座に分岐して、スキーマの変更をテストするためのステージング環境を作成します。

Non-blocking schema changes
Google翻訳:
PlanetScale のノンブロッキング スキーマ変更機能により、スキーマ変更を本番環境に安全にデプロイできます。 CI/CD プロセスの一部としてスキーマ管理を簡単に自動化できます。

Deploy requests
Google翻訳:
デプロイ リクエストを使用すると、スキーマの変更を提案し、チームからフィードバックを得ることができます。 行ごとのスキーマ差分により、変更を簡単に確認できます。
デプロイ リクエストと GitHub プル リクエストを組み合わせて、コードとスキーマの変更を並行して確認します。

Deploying a schema change
Google翻訳:
スキーマの変更が承認されると、デプロイ キューに追加されます。 PlanetScale は展開のタイムラインを提供し、キューに入れられたスキーマの変更が競合しないようにします。

Insights and monitoring
Google翻訳:
データベースの読み取りと書き込みを追跡するグラフを使用して、本番トラフィックを把握します。 クエリ インサイト機能を使用して、スロー クエリを特定して最適化します。
データベースを作成し、PlanetScale ワークフローを開始します。

DBの作成
Create your first database をクリック

DB名 と リージョン を設定して Create database をクリック
今回は sample_database という名前で Tokyoリージョン に作成してみました

DBに接続
接続情報の確認
まずは接続情報を確認します
DB 作成が完了すると DB の Overview タブ に遷移します
Connect をクリックして接続情報を確認します

パスワードは初回のみしか表示されません

パスワードを忘れてしまった場合は New password から新しく発行することができます
接続方法は丁寧にいろいろな方法が紹介されています
今回は TablePlus というGUIツール(Windowsの場合はMySQL Workbenchなど)を利用して接続してみたいと思います

接続方法で General を選択して下記の接続情報を確認できます
ここでは password は表示されません、先程の初回表示か New password で確認できます
- database
- username
- host
- password

TablePlusで接続
TablePlus を開いて Cerate a new connection... をクリック

MySQL を選択して Create をクリック

下記を設定して Connect をクリック
- Name
- Host
- User
- Password
- Database

テーブル作成
試しに下記のようなテーブルを作成してみます
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255),
`email` varchar(255),
PRIMARY KEY (`id`)
) ENGINE InnoDB,
CHARSET utf8mb4,
COLLATE utf8mb4_0900_ai_ci;

PlanetScale のWebコンソールからもテーブルの数やスキーマを確認することができます
Overview タブで確認できます

Branches > ブランチを選択 > Console タブの CLI で確認できます

Branches > ブランチを選択 > Schema タブで確認できます

ブランチ
ブランチの作成
PlanetScale の特徴であるブランチの作成をしてみたいと思います
Overview タブから New branch をクリック

ブランチ名、ベースブランチ、リージョンを設定して Create branch をクリック

ブランチが作成されると、作成したブランチの Overview 画面が表示されます
ブランチは矢印の場所で表示切り替えできます

Connection から作成したブランチの接続情報を確認して TablePlus で接続してみるとブランチを作成した時点の Base branch のスキーマが反映されていることが確認できました

Branches タブでは mainブランチ から先ほど作成した productionブランチ が作成されていることがわかります

本番ブランチの設定
先ほど作成せた production ブランチを本番用のブランチに設定したいと思います
Branches > ブランチを選択 > Promote a branch to production をクリック

本番ブランチに設定することで下記のようなメリットがあります
Google翻訳:
- スキーマの直接変更から保護
- 高可用性
- 自動スケジュール バックアップ

デプロイ
開発用ブランチ(main) で行ったスキーマなどの変更を 本番ブランチ(production) にデプロイしてみたいと思います
開発ブランチにカラムを追加してみる
まずは開発ブランチの DB でスキーマを変更したいと思います
ここではmainブランチを開発ブランチとしています
TablePlus などで開発ブランチのDBに接続して age カラムを追加します
Schema タブでも age カラムが追加されていることが確認できました

デプロイリクエスト作成
開発ブランチ(main) を 本番ブランチ(production) へデプロイするためのデプロイリクエストを作成してみます
Overview > Deploy to で 本番ブランチ(production) を選択 > Create deploy request をクリック

デプロイリクエストの作成が完了するとサマリーを確認できる画面に遷移されます
ここでは変更のSQLなどを確認することができます
ageカラム を追加していることが確認できます

デプロイ実行
Deploy request タブ > 先程のデプロイリクエスト を選択 > Deploy changes をクリックしてデプロイが開始されます

デプロイが成功するとステータスが Deployed になります

実際に 本番ブランチ(production) のスキーマを確認してみると ageカラム が追加されていることが確認できます

スキーマの差分を確認
スキーマの差分を確認することもできます
Deploy request タブ > 先程のデプロイリクエスト を選択 > Schema chenges タブをクリック
ageカラム を追加したことがひと目で確認できます
GitHub と同じように見れるのでとてもわかりやすいです

モニタリング
Insights タブでは Query latency や Queries を24時間分確認できます
料金プランをアップグレードすることでより多くの履歴を表示することができます

バックアップ
バックアップには 即時バックアップが取れる 手動バックアップ と、スケジュールでバックアップを取得する スケジュールバックアップ があります
手動バックアップ
Backups タブ > 対象のブランチ(Production branches) タブを選択 > Create new backup をクリック

対象のブランチ と バックアップ名 と 保存期間 を設定できます

バックアップが作成されるとバックアップ一覧で確認することができます

バックアップの詳細ページでは リストア や 削除 ができます

スケジュールバックアップ
ブランチを作成した時点でデフォルトで毎日のバックアップが設定されていますが、試しに毎週のスケジュールを作成してみたいと思います
Backups タブ > 対象のブランチ(Production branches) タブを選択 > Add new schedule をクリック

hours day weeks months が選択できます
weeks を選択すると曜日を選択する項目が表示されるので適当な曜日を設定して時刻を設定します
ここでは保存期間を1週間にしてみました
各項目を設定したら Save schedul をクリック

スケジュールが作成されてことが確認できます

参考
Discussion