技術とかの雑なToday I Learnedメモ

PlanetScaleについての記事を読んだ

PlanetScaleについての記事を読んだ

PlanetScaleとは何か、なぜ外部キー制約をサポートしていないのか

昨日触れたPlanetScaleについての記事を読んだ。

そもそもなんなのかというところからで、

PlanetScaleはMySQLのマネージドサービスです。

ここから。

RDS for MySQLとかCloud SQL for MySQLとかと同じような位置付けでいいのかな。

ダウンタイムなしのマイグレーション

この機能を初めて読んだときは「すご……」というシンプルな感想が出た。

マイグレーションは機能を開発していく上では必須なのでかなり良さそう。

空のghost tableにALTER TABLEして問題なければ元のテーブルからデータをコピーして、その間の変更も取り込みつつ最後にrenameしてghost tableのほうが本番DBとなる、という理解。

これ思いついたとしても実際に実装するめちゃくちゃ大変そう。。。

これでダウンタイムなしで本番環境にリリースできる。すごいな。

ブランチ機能

マイグレーションファイルをGitHubで管理するというのは当たり前だけど、これはGitHubで管理してるアプリケーションコードみたいにDBそのものを管理できるというもの。

本番DBからブランチを切って開発用DBを作り、そこで変更を加えて、デプロイリクエストを作り、approveされたらdeployされてスキーマ変更が本番DBに適用される。

こう書くとシンプルだけどものすごい開発しやすそう。

コンフリクトしてたらスキーマ変更できないようになってるので安心できるし、すごいな。

データを失わずにスキーマ変更をRevertする

マイグレーション後に使用されなくなったスキーマとデータをshadow tableとして持っておき、デプロイ後30分以内ならshadow tableをproduction tableと入れ替えることで復元する。

デプロイ後のデータの変更はshadow tableにも反映されているため、デプロイ前のデータを復元しながらデプロイ後のデータも整合性を失わずに持ち続けられる。

これも書いてることは「なるほどすごい」となるが、この機能を実現するためにどれほど難しいことが行われてきたのか。想像に難い。

ここらへんをマネージドでやってくれるのは開発者にとってものすごく楽なのではないだろうか。

まとめ

バックエンド全然できない自分でもすげえと思える内容だったので、ちょっと使ってみたいですね……。