Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PlanetScale さわってみた

reteigi
December 22, 2022

PlanetScale さわってみた

reteigi

December 22, 2022
Tweet

More Decks by reteigi

Other Decks in Business

Transcript

  1. 今日はなすこと • PlanetScale について ◦ PlanetScale とは ◦ すごいところ •

    実際に使ってみる ◦ PlanetScaleの管理画面からテーブルを作る ◦ 普通の読み書きを試す ◦ レプリケーションを試す ◦ 同時接続1000を試す ◦ オートスケールを試す ◦ スキーマチェンジを試す • まとめ
  2. すごいところ① - ノンブロッキングスキーマ変更 • 普通のMySQLでは、レコード数の多いテーブルのスキーマ変更は時間がかかる上 に、テーブルロックがかかるので(厳密にはアルゴリズムによる)、レコード数の多い テーブルのスキーマ変更はかなり大変 • 小黒は過去下図のようにして実現していた 2.

    カラム変更した同じ構成のテー ブルを作ってデータをコピーしてい く 3. カラム変更したテーブルを 切り替え(rename) new_table old_table 1. Webサービスをメンテ状態 へ new_table old_table 4. メンテ解除 old_table new_table
  3. すごいところ① - ノンブロッキングスキーマ変更 • PlanetScaleは面倒な作業なしでスキーマ変更が可能!! ◦ しかもサービスはとめずにやってくれる(ノンブロッキング!!) ◦ 内部的には書き換え中に old_table

    に飛んできたクエリも全てコピーし、 old_table と new_table で 差分がなくなった時に切り替えるらしい。すごい 1. カラム変更した同じ構成のテー ブルを作ってデータをコピーしてい く 2. カラム変更したテーブルを 切り替え(rename) new_table old_table new_table old_table
  4. すごいところ② - シャーディング • MySQLなどでシャーディングする場合、どこのデータベースにデータをとるかアプリ 側で都度確認しなきゃいけない common 1. user_id: 1

    の情報が格納され てるDBを教えて〜 2. user_id: 1 の情報が格納され ているのは shard3 です! 3. user_id: 1 の情報をくれ〜 shard1 shard2 shard3 アプリケーション
  5. すごいところ② - シャーディング • PlanetScaleが全部やってくれる!!! • シャード用の処理をわざわざ実装しなくてOK 1. user_id: 1

    の情報をくれ〜 user_id: 1 は shard3 に問い合 わせればOK shard1 shard2 shard3 アプリケーション
  6. 普通の読み書きを試す クエリ ミリ秒(1000回の平均) insert into Tasks (Name) values(?) 16 select

    * from Tasks where id = ? 12 update Tasks set Name=? where id = ? 17 delete from Tasks where id = ? 17 • 下記のクエリをそれぞれlambda経由で発行した • lambda <-> planetscale の間の通信時間は下記。そこまで遅くはない ※ 1000万レコードが入っているテーブルに対して上記を順に実行した ※ id は PK なのでIndex が貼ってある ※ ハンドシェイクの分は含んでおらずクエリの結果を受け取るまでの時間
  7. 普通の読み書きを試す • Index ◦ 先ほどのテーブルに select * from Tasks where

    Name=? というIndexが貼られていないクエリを試 したが 10sec くらいかかったので普通に Indexの概念は有効そうだった • Transactionの発行 ◦ 問題なく発行でき、rollback/commitが有効だった ◦ ただ Transaction は 20sec しかもたないらしく、バッチ処理などでまとめて commitするとかは厳し そう ▪ そもそもそーゆのが微妙なんだけど、、
  8. レプリケーションを試す • PlanetScale ではVitess が中で replica を作ってくれてるのでわざわざread only 用のデータベースを作らなくてもいいのかもしれない、、 ◦

    リージョンが別なことを考慮すると、グローバルな Webアプリケーション向けに物理距離が近いデー タベースを用意するために作ってるのかも、、?
  9. 同時接続 1000 を試す • aws の分散負荷チェックツールを使って検証 • lambdaを使って並列でPlanetScaleにリクエストを投げまくってみた ◦ lambda

    の同時実行数を1000にしたので理論上は 1000並列になるはず、、? ◦ lambda の関数はシンプルな select を行うだけのもの
  10. まとめ • Good ◦ 簡単に使える ◦ 大量アクセスに強い ◦ オンラインDDL •

    Bad ◦ やっぱりちょっと高い、、、 ◦ ドキュメントが不足している(オートスケール試したかった〜〜) • 総評 ◦ 負荷分散の仕組みやオンライン DDLなど、未来な感じがするサービスでした ◦ 運用の手間をどこまで削減できるか、をすごく考えてるなーと ◦ スケールした時にお金めっちゃ取られそうなので、商用サービスの本番環境に持ってくるにはちょっ と怖いなあと思いましたが、個人開発であればもはやこれ一択なのでは