[レポート] Serverless Meetup Japan Virtual #5 の参加メモ #serverlessjp
2020-08-26Serverless Meetup Japan Virtual #5 にオンラインで参加したので、その参加レポート・メモです。
Twitter のハッシュタグは #serverlessjp です。
#2、#3 の様子はこちら。
タイムテーブル
Timeline | Title | Speaker |
---|---|---|
20:45-21:00 | Social | |
21:00-21:05 | Opening Talk | |
21:05-21:10 | Forkwellさん告知!! | 重本湧気さん |
21:10-21:30 | DynamoDB のインデックス再編事例 | 丹羽一智さん (Game Server Services) |
21:30-21:40 | Meetup | Zoom参加メンバー |
21:40-22:00 | 楽しいことにフォーカスしたい!上手なクラウドの使い方 | 中丸良さん (Google) |
22:00-22:30 | Meetup | Zoom参加メンバー |
22:30- | Closing |
セッションレポート
DynamoDB のインデックス再編事例
- SEGA -> Nintendo -> 起業
- GS2 というゲームに特化したサービス
- DynamoDB のテーブル構成のベストプラクティス
- 動機
- インデックスの設計に失敗
- LSI (Local Secondaly Index) はテーブル作成時にしか設定できない
- マルチテナント x マイクロサービスで、それぞれの組み合わせでテーブルを作成
- 結果としてテーブル数が 2,000 を超える
- 新しいテーブルを準備
- 流れは RDBMS のシャーディングと同じ
- 新しいテーブルへの同期
- 方法としては 2 通り
- DynamoDB Stream
- 作成・更新・削除イベントから Lambda を実行
- トランザクションを使用
- 今回はこちらを採用
- テーブル数が 2,000 もあり、Stream の制限があるのではないか?と思ったから
- DynamoDB Stream
- 方法としては 2 通り
- インデックス問題を回避するために
- 先にインデックスを作る
- 属性名に
__lsi_
をつけて先に作ってしまう - 使いたくなったら値を入れていく
- 1 テーブルでいろんなエンティティを扱いやすくなった
- バックアップ
- テナントごとにポイントインタイムリカバリ
- Cloud Firestore とほぼ同じ触り心地になった
Q&A
- Q. 副作用は?デメリットは?
- A. 人間が見にくくなる。関連する属性を消すのが大変。
- Q. GSI でやらない理由は?
- A. コストの問題と、整合性の問題。GSI だと結果整合性、 LSI だと強整合性。
- Q. マイクロサービスの観点からすると元々のほうが正しいのでは?
- A. ゲームの用途だと特定のマイクロサービスだけロールバックするということはない。
- Q. シングルテーブル設計が好きだが、設計に時間がかかる。新しい開発だとそのあたりの難しさは?
- A. 新しいデータのとり方をしたくなったときにできない。
- Q. 設計に掛けた時間は?
- A. 2 週間くらい
- Q. コストは削減できた?
- A. あまり削減できた印象はない。ただし、オンデマンド/プロビジョニングの管理はしやすくなった。
- Q. コストは削減できた?
- A. 2 週間くらい
- Q. 設計に掛けた時間は?
- A. 新しいデータのとり方をしたくなったときにできない。
- Q. DB アクセス用のリポジトリ自動生成について。
- A. DDL をもとに、そのテーブルにアクセスするためのクラスができあがる。
- Q. 本体のプログラム変更にかかった時間は?
- A. インターフェースは同じなので、 DB アクセス部分の入れ替えのみで対応できた。
- Q. 基本的にインデックスをもとにデータを引っ張ってくる?
- A. そう。JOIN したいような場合は複数クエリを投げるスタンス。
- Q. パフォーマンスは?
- A. シングルテーブルになったとは言え、はやくなったわけではない。
- Q. 苦手なクエリは?日付の範囲など。同じキーが並ぶ場合など。
- A. コンポジットキーが苦手。LSI に値を連結させたものを保持する。
範囲検索はレンジキーを使うが、他の条件 (他のキー、他の範囲) と組み合わさると難しくなる。
同じキーが並ぶ場合については、キーが分散するようなキー設計をしている。
- A. コンポジットキーが苦手。LSI に値を連結させたものを保持する。
楽しいことにフォーカスしたい!上手なクラウドの使い方
(※ 大人の事情によりメモもローカルにとどめておきます…)
まとめ
Serverless Meetup Japan Virtual #5 の参加メモでした。
今回は Amazon DynamoDB の話と、 Google Cloud の話でした。 DynamoDB については、シングルテーブルでの (キー) 設計はすごく複雑で大変そうだなという印象を受けました。 DynamoDB については無理せずテーブルを分けていくという考えしかなかったので、シングルテーブルでの運用については調べてみようと思いました。
zoom 枠の方々には AWS、Azure、GCP な人がそれぞれいらっしゃったので、各クラウドをまたいだ話を聞くことができたのもすごく勉強になりました。
次回以降も楽しみです。今回も開催ありがとうございました。
comments powered by Disqus