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

Future Tech Night#15 GCP Spanner検証 20210830

Oda Yuki
August 30, 2021

Future Tech Night#15 GCP Spanner検証 20210830

Future Tech Night#15での登壇資料です。
https://connpass.com/event/220822

2017年にGoogleから分散データベースのCloud Spannerが発表されました。

SpannerはRDBに備わっているSQLクエリ、ACIDトランザクション等の機能をサポートしながら、秒間数千クエリの処理や自動シャーディングが可能と謳われていて夢のようなデータベースとなっています。でもおいしい話には裏がつきもの。

実際そんなに性能出るの?開発の際に面倒だったりするんじゃないの?お高いんでしょう?社内検証の結果でこれらの疑問に答えていきます!

Oda Yuki

August 30, 2021
Tweet

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 織⽥ 勇冴 信⻑の⼦孫…︖ 経歴 新卒でFuture⼊社して5年⽬ TIG DXチーム所属 開発/PoC/コンサルその他諸々 趣味

    ボードゲーム(遊ぶ⽅も作る側も) 釣り Auth0漫画リリースパーティにて 新作ボードゲーム「ドラ猫」「タテヨコ探偵」11⽉に発売予定︕
  2. 2017/2 Spannerサービスイン 参考 2011/11 Cloud SQL 2016/8 Bigtable 2019/2 Firestore(前⾝の

    Datastoreは2016/8) GCPの中でも若い⽅のサービス 提供開始⽇ https://medium.com/google-cloud-jp/cloud-spanner- %E3%81%AE%E3%83%8F%E3%82%A4%E3%83%AC %E3%83%99%E3%83%AB%E3%82%A2%E3%83%BC %E3%82%AD%E3%83%86%E3%82%AF%E3%83%81 %E3%83%A3%E8%A7%A3%E8%AA%AC- fee62c17f7ed 分散型のリレーショナルデータベー ス。 分散型なので⽔平スケールが容易 に⾏える⼀⽅、SQLクエリやACID トランザクションと⾔ったRDBに求め られる機能もサポート。 内容 Spanner概要 検証結果の前に… コロプラ • ドラゴンクエストウォーク メルカリ • メルペイ 他には勘定系での導⼊が取り上げ られているが、事例は多くはない 採⽤事例
  3. 性能⾯での検証 ~結果~ 条件 測定結果 No. 実⾏内容 計測時間 (min) Spanner (Nodes)

    RPS Latency(ms) 50%tile 95%tile 99%tile 1 キー指定SELECT 5 3 6600 12.007 19.456 37.696 2 キー指定UPDATE 5 3 3000 58.154 82.634 1,395 3 集計処理 5 3 200 217.5 1,634 1,800 • 単純なSELECT, UPDATEは少ないノード数でも⾼い性能を持つ。 • 集計処理は単純な処理に⽐べると性能は落ちる。 Spannerは⾮常に⾼い読み込み、書き込み性能を誇る ただし複雑な集計処理では性能が落ちるので、過信は出来ない
  4. ⾃動シャーディングの検証 ~結果~ • シャーディング⾃体は本当に⾃動でやってくれるた め、意識する必要なし • シャーディングは基本的にはデータのキーの辞書 順で⾏われる • キー設計の段階でシャーディングを意識する必要あり

    • KeyVisualizerでデータアクセスのヒートマップを 確認することが出来る シャーディングは⾃動で⾏ってくれるので運⽤が⾮常に楽。 性能を引き出すには、シャーディングのキー設計やアクセスパターンの確 認が必要。 KeyVisualizerスキャンの画⾯ ⾮常にかっこいいが、ここから有⽤な情報を得るには 知識と経験が必要
  5. SQL対応検証 ~結果~ • 公式がSpannerへ移⾏する際のガイドを出しているので、それに従えば Spanner仕様に書き換え可能 • 対象はMySQL, Oracle, PostgreSQL, DynamoDB

    • 主要な集計関数やヒント句は網羅しており、不便は感じない • 注意点は以下の通り • ⼀部データ型を変換する必要あり • ストアド・プロシージャやトリガが⾮対応 • ⼀部組み込み関数が⾮対応(実装に困る程ではない) 他のDBとのSQLの違いに気を付ける必要はあるものの、⼤きな問題なし。 主要な違いについては公式で整理されているので把握はしやすい。
  6. SQLチューニング検証 ~結果~ • SQLの実⾏計画 • コンソール上でクエリプランナを使⽤可能 • クエリ内の時間がかかっている処理の確認や不⾜しているインデックス の提案も受けられ、他のDBの機能と遜⾊ない •

    クエリの統計情報 • ⼀部クエリの統計情報のみ取得可能 • そのため、どのSQLで時間がかかっているかはアプリ側でも測定する 必要がある 遅いクエリが分かれば他のDBと同様実⾏計画を⽤いたチューニングが 可能。クエリ統計情報については既存DBより弱いので、アプリでの性能 測定も並⾏して利⽤するのが良さそう。 Spannerのクエリプランナ ⾮常に使いやすく、JSONでのデータ ダウンロードも可能
  7. 価格検証 ~結果~ • 最⼩単位である1Nodeが⾼い • アジアマルチリージョン構成で約$3,000/⽉ • しかも無料枠なし • ただし1Nodeで捌けるリクエスト数は⾮常に多い

    • 最近Beta版で0.1Nodeから使⽤可能に︕ • ただし、1Node以下の場合に限る。 0.1, 0.2,…0.9, 1, 2, 3といった形 最⼩単位で既に⾼性能なため、⼩規模なアプリには不向き 将来的に⼩さいリソースでの⽴ち上げが可能になるかも︖
  8. ローカル開発環境検証 ~結果~ ググってみると、何やら良さそうな記事が︕ • https://future-architect.github.io/articles/20210323/ • Future Tech Blog, よろしくお願いいたします。

    DBクライアントについてはDBeaverでローカルSpannerの参照、クエリ実 ⾏がGUI上で出来て便利 • 使⽤できるDBクライアントツールは限られるので注意 DockerでのSpannerエミュレートが可能。 Future Tech Blog素晴らしい︕便利︕