フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【新規ツール探し】MySQL + Vitess をフルマネージドで提供する宇宙スケールのDB「PlanetScale」を触った

  • 記事作成日:2022/12/11

情報

名前 URL
Github
公式サイト https://planetscale.com/
デモサイト
開発母体 PlanetScale
version -
言語 -
価格 有料
ライセンス -

何ができるもの?

  • MySQL 8.0 をサーバーレスで利用できる
  • Vitess のスケールを兼ね備えている
  • ブランチモデルを利用した開発に応じたDBの提供
  • ブランチを利用した開発→本番の変更差分のPR化
  • スキーマ変更時のパフォーマンス低下、テーブルのロックを発生させない
  • スキーマ変更の revert

できないこと(MySQLとの互換性)

PlanetScale - MySQL compatibility

  • 外部キーの利用
  • テーブル名、カラム名の変更
  • ストアドルーチンが利用不可
  • パフォーマンス上の理由から、数MB以上のJSONドキュメントを保存することはお勧めしません

結構クセがありますね。

外部キーが利用できないのは、オンラインでのDDL操作が外部キーと干渉するとのことです。(Vitess | Scalable. Reliable. MySQL-compatible. Cloud-native. Database.)

また、そもそもDBをシャーディングしたりするとそもそも利用できません。

利用シーン

  • MySQL 互換で、手軽にフルマネージドDBを使いたい場合
  • AWS / GCP に依存しない形で使いたい場合(実質 AWS のリージョンで動くが、クラウドを今後は選べる)

登場背景

by DeepL

私たちは、データベースはパワフルで使いやすく、非の打ちどころのない開発者体験であるべきだと考えています。そのため、私たちはサーバーレスプラットフォームを構築し、開発者がスケールについて心配することなく生産性を高められるようにしました。 PlanetScale is now generally available

価格

PlanetScale - Billing

  • 従量課金
  • Hobby プランなら無料

  • ScalerプランとTeamプランでは、含まれる容量を超えるストレージの追加分は1GB追加につき2.50ドル、含まれる容量を超える読み込み行の追加分は10億追加につき1ドル、含まれる容量を超える書き込み行の追加分は100万追加につき1.5ドルで課金されます。

所感

  • MySQL + Vitness をフルマネージドで利用でき、インフラを一切気にしなくて良いのが嬉しい。
  • スキーマの変更管理がGitHub ライクに制御でき、スキーマ変更についてツールをあれこれ検討したり CI をほとんど用意しなくていいのが楽
  • パフォーマンスについて解説が見当たらなかったので不明。もしかしたら vitness の方で説明されているのかも。またシャーディングなどを勝手にしてくれるのかもわからなかった。
    • Spanner の場合だと、PKをUUIDにしておくことでバラけさせたり Interleave を使うのだがこれだとどんな感じなんだろう
  • NewSQL と比較した時に、ある程度のやりづらさが残っている記事を見かけたので新規採用の際に候補に上がるのかが不明(vs TiDBやSpanner)

使い方

アカウント登録

GitHub でログインできるので楽ちんです。

テーブル作成

こちらのリージョンから選べる。

beta で GCP もあるので Atlas のようにマルチクラウドでやっていく感じなんですかね。 クラウド間レプリケーションもあるのだろうか?

作成するとこんな感じ。

table の作成

CREATE TABLE hotels(
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  address VARCHAR(50) NOT NULL,
  stars FLOAT(2) UNSIGNED
);

シンプルですね。特に違和感はないです。

ブランチについて

環境を分離するためにデータベースのスキーマのコピーを管理する 「ブランチ」 という機能があります。(git の branch の概念と同じです) ブランチのスキーマに対する修正は、別のブランチに影響を与えません。

ブランチの修正は、別のブランチにマージするまで反映されないので、ステージング環境で変更を試して、成功した差分を本番に適用することができます。GitHub の PR のように承認、レビュー作業が行えます。

チュートリアルでは、2つのブランチを使っていきます。

  • 本番ブランチ
  • 開発ブランチ

本番ブランチには以下の制限が加えられています

  • 直接の DDL 操作を禁止(CREATE / ALTER / DROP TABLES or COLUMNS or VIEWS など)
  • Deploy Requests でのスキーマ変更を apply するのみ
  • デフォルトではコンソールアクセス禁止
  • 本番ブランチは最低一つの 内部レプリカを自動で作り停電から守る

main ブランチを本番に昇格させます。

console で見れなくなりました。

開発ブランチの作成と操作

続いて dev を作ります。

main から派生してますね。

ALTER TABLE してみましょう。

ALTER TABLE hotels ADD description VARCHAR(500);

変更差分を main にマージする

Deploy Requests を作ります。

投稿すると GitHub のように差分が見えます。

Deploy Changes を押すと反映されますね。

main を見るとちゃんと反映されてますね。

DBへの接続

接続方法がこれだけあって教えてくれます。

今回は CLI を使ってみます。

❯ brew install planetscale/tap/pscale

❯ pscale auth login


Confirmation Code: xxx

If something goes wrong, copy and paste this URL into your browser: https://auth.planetscale.com/oauth/device?user_code=xxx

Successfully logged in.
                                                                         
❯ pscale shell my-test dev

my-test/dev> show tables;
+-------------------+
| Tables_in_my-test |
+-------------------+
| hotels            |
+-------------------+
my-test/dev> 
my-test/dev> desc hotels;
+-------------+----------------+------+-----+---------+----------------+
| Field       | Type           | Null | Key | Default | Extra          |
+-------------+----------------+------+-----+---------+----------------+
| id          | int unsigned   | NO   | PRI | NULL    | auto_increment |
| name        | varchar(50)    | NO   |     | NULL    |                |
| address     | varchar(50)    | NO   |     | NULL    |                |
| stars       | float unsigned | YES  |     | NULL    |                |
| description | varchar(500)   | YES  |     | NULL    |                |
+-------------+----------------+------+-----+---------+----------------+

楽ちんでした!開発者体験は良さそう。