Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
デイリーレコード数2億超え! 大規模ゲームサービスに Snowflakeを導入したお話
Search
伊藤寛起
December 04, 2020
Technology
0
2.4k
デイリーレコード数2億超え! 大規模ゲームサービスに Snowflakeを導入したお話
Data Engineering Study #5「噂のSnowflake Deep Dive」の登壇資料です。
https://forkwell.connpass.com/event/194269/
伊藤寛起
December 04, 2020
Tweet
Share
Other Decks in Technology
See All in Technology
検証からプロダクトへ: シームレスなLLM開発の ためのしくみ作り
nunukim
1
210
オブジェクト指向宗教史
tanakahisateru
14
12k
AFTを運用していたらAWS Configの課金が急増していた件
msato
0
120
統計的学習理論読み Chapter 2
kmatsui
1
300
LLMプロダクト事業の立ち上げにおける挑戦
layerx
PRO
7
1.5k
MongoDB Atlas Vectorsearchではじめる生成AIアプリ開発
chie8842
3
510
生成AI・LLM時代における 機械学習エンジニアとしてのキャリア戦略・開発戦略 / my-career-and-development-strategies-for-ml-engineer-2024
yuya4
4
960
サービスメッシュ環境における OpenTelemetry 活用 / OpenTelemetry in Service Mesh
k6s4i53rx
2
870
BDD(Cucumber)コミュニティが無料提供しているコンテンツの紹介と現在起きている危機
nihonbuson
4
750
SaaS型Webサービス「カオナビ」のチーム開発でPackage by Featureを取り入れた話/Implementing Package by Feature in kaonavi
kaonavi
0
110
暗黙知を集積するプラットフォーム : 「健常者エミュレータ事例集」の取り組み
sora32127
1
170
複数の LLM モデルを扱う上で直面した辛みまとめ
kazuyaseki
1
260
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
215
8.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
39
4.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.2k
GitHub's CSS Performance
jonrohan
1023
450k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
113
18k
How STYLIGHT went responsive
nonsquared
92
4.7k
Building an army of robots
kneath
300
41k
Reflections from 52 weeks, 52 projects
jeffersonlam
343
19k
Principles of Awesome APIs and How to Build Them.
keavy
119
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
219
21k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
1
3.3k
Transcript
デイリーレコード数2億超え! 大規模ゲームサービスに Snowflakeを導入したお話
アジェンダ 第一部 : DWH初心者がSnowflake導入してみた話 第二部 : DWH初心者がSnowflake運用してみた話
DWH初心者がSnowflake導入してみた話
導入してみた人 伊藤 寛起 (いとう ひろき) 株式会社Colorful Palette / エンジニアリングマネージャー -
主にJavaでゲームAPI作ってる人 - クラウドは専らAWS, BigQueryを使いたいが為にGCPを少々 - アプリ/インフラで云うと6:4くらい
- プロダクト紹介 - Snowflakeの選定理由 - 導入段階で大変だったこと - 導入決定から運用まで DWH初心者がSnowflake導入してみた話
プロダクト紹介
プロダクト紹介:プロジェクトセカイ - 初音ミクのスマートフォンリズムゲーム - 大規模参加型のバーチャルライブ機能が特徴 - 1日に蓄積されるログは2億レコード - インフラはAWS
Snowflakeの選定理由
- コスト - パフォーマンス / スケーラビリティ - 技術的チャレンジ Snowflakeの選定理由
- ウェアハウスの起動時間による課金体系が、スキャンした データ量より直感的でわかりやすい - インフラがAWSなので、データ転送料が掛からない - 連携が楽、使い慣れたAWSのサービスで完結出来る コスト
Snowpipe (https://www.snowflake.com/blog/snowpipe-serverless-loading-for-streaming-data-2/?lang=jaより引用)
- ゲームはとにかく収集するログの量や種類が多い - アクセスログ、エラーログ、ユーザ行動ログ... - それら大量のログから目的のデータを迅速に抽出する 必要がある - ログの種別毎、扱うオペレータの職種も多様 -
エンジニア、データアナリスト、カスタマーサポート... パフォーマンス / スケーラビリティ
マイクロパーティション (https://docs.snowflake.com/ja/user-guide/tables-clustering-micropartitions.html より引用)
計算 / ストレージ分離 (https://www.snowflake.com/blog/5-reasons-to-love-snowflakes-architecture-for-your-data-warehouse より引用)
ユーザ / ロール (https://docs.snowflake.com/en/user-guide/security-access-control-overview.html より引用)
ウェアハウス・ロールの設計 ウェアハウスは用途で分割 ➡ コストレポートが見やすくコスト最適化がしやすくなる
ロールは職種で分割 ➡ やることが職種で別れていたので権限管理がしやすかった
- 国内のゲーム業界においては導入事例も少ない - チャレンジ出来るときには積極的にチャレンジ 技術的チャレンジ
導入段階で大変だったこと
導入段階で大変だったこと 権限設定 ロールに対して設定するものが多い... 管理方法は考える必要あり
(https://docs.snowflake.com/en/user-guide/security-access-control-overview.html より引用)
導入決定から運用まで
運用までのスケジュール トライアル開始から約1ヶ月で導入が出来ました。 トライアル期間 主に権限設計やテーブル設計を行い つつの学習期間 試験導入 BIツールと連携しての運用検証 9月15日
9月1日 9月25日 9月30日 リリース!
DWH初心者がSnowflake運用してみた話
運用してみた人 安部 永 (あべ はるか) 株式会社Colorful Palette / サーバサイドエンジニア -
20新卒 - ログ基盤の実装やアプリの実装を担当 - アプリ/インフラで云うと5:5くらい
DWH初心者がSnowflake運用してみた話 - ColorfulPaletteでのSnowflakeのユースケース - 運用時のトラブルいろいろ - 運用してみた所感とまとめ
ColorfulPaletteでのSnowflakeのユースケース
ColorfulPaletteのログ分析基盤 EC2 (アプリサーバ) Aurora (DB) S3 Kinesis Firehose 追記型データ (ログなど)
分析担当 更新型データ (マスタ,ユーザ登録情報など) 非定常データ (アンケートデータなど) Lambda (バッチ) アップロード S3にjson形式で集約
ColorfulPaletteのログ分析基盤 S3 Kinesis Firehose 追記型データ (ログなど) 更新型データ (マスタ,ユーザ登録情報など)
分析担当 非定常データ (アンケートデータなど) Lambda (バッチ) Snowpipe EC2 (管理画面) アップロード オンライン更新 (追記型データ) オフライン更新 or 外 部テーブル (追記型データ以外) EC2 (アプリサーバ) Aurora (DB)
運用時のトラブルいろいろ
運用時トラブルの事例共有 ① Snowpipeでのデータ取り込み時の欠損 (不正行のあるJsonの取り込み) → 不正行以降のログが取り込まれない 正常な例 {"Id":1,"type":"item"}
不正な例 (途中で改行) {"Id":1,"type": "item"}
運用時トラブルの事例共有 ① Snowpipeでのデータ取り込み時の欠損 (不正行のあるJsonの取り込み) → 不正行以降のログが取り込まれない 正常な例 {"Id":1,"type":"item"}
不正な例 (途中で改行) {"Id":1,"type": "item"} 解決策 COPY文で指定するフォーマットをjsonではなくCSVにする & on_error = CONTINUE パラメータを指定
運用時トラブルの事例共有 ② Json形式データ使用時のフルスキャン 元々のテーブル定義: =>
各レコードがJsonの一行に対応するテーブル構造 (適当に入れておいても良い感じに パーティションしてくれるだろうという考え)
元々のテーブル定義: => 各レコードがJsonの一行に対応するテーブル構造 =>
約950MBのデータに対して特定の属性を 検索した際に936.2MBのスキャンが発生 (ほぼフルスキャン,コストも結構かかってしまっていた) 運用時トラブルの事例共有 ② Json形式データ使用時のフルスキャン
運用時トラブルの事例共有 ② Json形式データ使用時のフルスキャン 解決策:Jsonをパースして取り込む + クラスタリングキーを指定 +
cluster by (activityType) パース済み 生データ スキャン量 13.7MB 936.2MB 行動タイプのカラム (where句に指定)
運用時トラブルの事例共有 ② Json形式データ使用時のフルスキャン 解決策:Jsonをパースして取り込む + クラスタリングキーを指定 +
cluster by (activityType) パース済み 生データ スキャン量 13.7MB 936.2MB クラスタリングキーのチューニング が大切 1. where句に指定されるカラム 2. カーディナリティの”低め”なカラム 行動タイプのカラム (where句に指定)
運用してみた所感とまとめ
運用してみた所感 Snowpipe便利!一方,つまずきポイントも... ワークシートの使い勝手が良い! 範囲選択で実行 クエリのプロファイリングをグラフィカルに表示
Snowpipe便利!一方,つまずきポイントも... ワークシートの使い勝手が良い! Snowflake独自の仕様 - PK / NOT
NULL制約が効かない - BigQueryに慣れてると戸惑うかもしれない (関数とか) 脳死でコストが下がるかというとそうでもない - クラスタリングキーのチューニングなどは依然必要 運用してみた所感
1部2部まとめ - Snowflake導入して良かったとこ - 手厚いサポート - Snowpipe,ワークシートなどの便利な機能 - 膨大なデータ量に対してもスケーラブル
- 導入時に一考の余地あり - Snowflake独自の仕様はそこそこある - ドキュメント読む or 都度サポートに相談 - 設計が重要 - ウェアハウスやログ,テーブル,ロール... - コストに大きく影響
1部2部まとめ - Snowflake導入して良かったとこ - 手厚いサポート - Snowpipe,ワークシートなどの便利な機能 - 膨大なデータ量に対してもスケーラブル
- 導入時に一考の余地あり - Snowflake独自の仕様はそこそこある - ドキュメント読む or 都度サポートに相談 - 設計が重要 - ウェアハウスやログ,テーブル,ロール... - コストに大きく影響 結論:大規模ゲームサービスでも問題なく運用できてます!
Thank you