Mais conteúdo relacionado
Semelhante a Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語る (20)
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
- 1. © 2021 Snowflake Inc. All Rights Reserved 1
2021/02/10 配信
https://www.youtube.com/watch?v=DUaQwn34JLE
- 2. © 2021 NTT DATA Corporation 2
自己紹介
渋谷 亮太
AI&IoT事業部
DBエンジニア
・ OLTP系
・ DWH系
・ Hadoopも
クラウドデータ分析基盤
■経験
- 3. © 2021 NTT DATA Corporation 3
SnowVillage Live 001:視聴者のみんなでSnowflakeにリアルタイムアクセス!
前回のおさらい
データ共有すごい!
マスキングすごい!
10億件データに対する
参照性能すごい!
タイムトラベルすごい!
ウェアハウスの
サイズ変更すごい!
BIツールやTwitterとの
連携すごい!
- 4. © 2021 NTT DATA Corporation 4
SnowVillage Live 001:視聴者のみんなでSnowflakeにリアルタイムアクセス!
前回のおさらい
データ共有すごい!
マスキングすごい!
10億件データに対する
参照性能すごい!
タイムトラベルすごい!
ウェアハウスの
サイズ変更すごい!
BIツールやTwitterとの
連携すごい!
すごすぎて何か怪しい・・・
落とし穴があるのでは・・・?
- 5. © 2021 NTT DATA Corporation 5
今日のテーマ
「Snowflakeって実際どうなの?」
全力で「怪しいところ」をあげて、リアルタイムで動かしてみて、
実際どうなの?を探ります
Snowflakeのここってどうなの?という疑問・質問をTwitterで募集します
#SnowVillage をつけてツイートお願いします
- 6. © 2021 NTT DATA Corporation 6
Snowflakeのアーキテクチャ
マルチクラスタ・共有データ(Multi Cluster / Shared Data)
- 7. © 2021 NTT DATA Corporation 7
疑惑1
ストレージが
ボトルネックに
なるんじゃ?
- 8. © 2021 NTT DATA Corporation 8
「共有データ」ということは、ストレージを共有するということ=普通に考えるとボトルネック
疑惑1:ストレージがボトルネックになるんじゃ?
ストレージがボトルネックになって
参照性能が出ないのでは?
- 9. © 2021 NTT DATA Corporation 9
疑惑1:ストレージがボトルネックになるんじゃ?
やってみる
• 10億件の小売データ(提供: )
• 全国の200店舗の担当者が、自店舗の売上点数と売上合計を一斉に集計
• 20店舗ずつ異なるウェアハウスが割り当てられている
→10億件データに対し、違う条件のクエリを同時に200個投げるユースケース
やってみる
- 10. © 2021 NTT DATA Corporation 10
• Snowflakeはオブジェクトストレージ(AWS S3, Azure Blob, GCP GCS)をメインス
トレージとして採用
• オブジェクトストレージは、パブリッククラウドのスケールを活かして超大規模なクラスタが組ま
れた分散ストレージ
→Snowflakeはその分散性能を活かしているから、ボトルネックにならない
疑惑1:ストレージがボトルネックになるんじゃ?
見た目(使い勝手)はこうだけど・・・ 実際はこんな感じ
- 11. © 2021 NTT DATA Corporation 11
疑惑1:ストレージがボトルネックになるんじゃ?
オブジェクトストレージってSSDに比べると遅いのでは?
- 12. © 2021 NTT DATA Corporation 12
疑惑1:ストレージがボトルネックになるんじゃ?
やってみる
• 10億件の小売データ(提供: )
• 2020年12月の売上データを抽出し、都道府県別の売上点数と売上合計を集計
→10億件データに対し、1000万件程に絞り込んで集計するケース
(71項目のうち、使用するのは3項目)
Retail
10億件
71項目
使うのはここだけ
やってみる
- 13. © 2021 NTT DATA Corporation 13
疑惑1:ストレージがボトルネックになるんじゃ?
• オブジェクトストレージの強みを活かすため、Snowflakeは「マイクロパーティション」という形
式でデータを保持
• データを小分けにして分散配置し、複数のサーバで同時に処理
• マイクロパーティションは、ハイブリッドカラムナ形式で保存されていて、必要なレコードが含ま
れるファイルの必要なカラムだけをバイト単位で読み込める
→必要なデータだけを読み取り、並列で処理して性能向上
ヘッダ R1 C1 R2 C1
Snowflakeデータブロック(マイクロパーティションファイル)
R1 C2 R2 C2 R1 C3 R2 C3
C1 C2 C3
R1
R2
R3
R4
ヘッダ R3 C1 R4 C1 R3 C2 R4 C2 R3 C3 R4 C3
テーブル
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
MP
サーバ サーバ サーバ
サーバ サーバ サーバ サーバ サーバ
- 14. © 2021 NTT DATA Corporation 14
ボトルネックにはならない!
むしろストレージの特性を活かした高性能
疑惑1:ストレージがボトルネックになるんじゃ?
実際どうなの?
- 15. © 2021 NTT DATA Corporation 15
疑惑2
更新の性能や
機能がしょぼいの
では?
- 16. © 2021 NTT DATA Corporation 16
疑惑2:更新の性能や機能がしょぼいのでは?
クエリサービスではなく「データベース」として使うからには、更新も非常に重要
トランザクション機能はどうなっているのか?
参照性能のために更新機能や性能を
トレードオフにしているんじゃないの?
- 17. © 2021 NTT DATA Corporation 17
疑惑2:更新の性能や機能がしょぼいのでは?
やってみる
• 10億件の小売データ(提供: )
• 大量のGzip圧縮されたCSVファイルをSnowflakeテーブルにロード
→10億件をロードするケース
• トランザクションを開始し、顧客名をUPDATE
• 別のトランザクションから参照
→トランザクション分離レベルを確認するケース
やってみる
- 18. © 2021 NTT DATA Corporation 18
疑惑2:更新の性能や機能がしょぼいのでは?
• SnowflakeはUPDATEでもDELETEでも、データを全てマイクロパーティションファイルごと
追記することで実現
• これにより、更新の性能は安定するし、更新してもデータブロックが汚れることはない
• この特性を活かしてRead Committed分離レベルのトランザクションを実現
ヘッダ A B C
A B C ヘッダ A B ’ C
UPDATE
一時的にデータは増えるが汚れない
Update後のファイルを新規追加
古いファイルは一定期間後削除
コミット前のSELECT
はこちらを参照
コミット後のSELECTは
こちらを参照
- 19. © 2021 NTT DATA Corporation 19
疑惑2:更新の性能や機能がしょぼいのでは?
独自の更新方式で性能は良い!
トランザクションもしっかり!
実際どうなの?
- 20. © 2021 NTT DATA Corporation 20
疑惑3
更新と参照が
混ざったら
遅くなるんでしょ?
- 21. © 2021 NTT DATA Corporation 21
疑惑3:更新と参照が混ざったら遅くなるんでしょ?
分散システムでトランザクションを守るためには、状態の同期が必要
一般的に、同期のためには性能を犠牲にせざるを得ないことが多い
ノー
ド1
ノー
ド2
ノー
ド3
Aテーブル
更新しよう
Aテーブル
参照しよう
どっちが勝ち?
- 22. © 2021 NTT DATA Corporation 22
疑惑3:更新と参照が混ざったら遅くなるんでしょ?
やってみる
• 10億件の小売データ(提供: )
• 10秒間隔で100ユーザから同時参照
• 1分間隔で1000件ずつロード(INSERTとUPDATEが半々)
• 更新と参照は別のウェアハウスで実行
→同一のテーブルに対する更新と参照の混合ワークロード
やってみる
更新 参照
- 23. © 2021 NTT DATA Corporation 23
疑惑3:更新と参照が混ざったら遅くなるんでしょ?
• Snowflakeは「クラウドサービス」「バーチャルウェアハウス」「ストレージ」の3層で構成
• トランザクションはクエリを受けつける「クラウドサービス」層が管理
ノー
ド1
ノー
ド2
ノー
ド3
クラウドサービス
・ Aテーブルはノード1が更新中
・ ノード3はコミット前のデータを参照させる
Aテーブル
更新しよう
Aテーブル
参照しよう
- 24. © 2021 NTT DATA Corporation 24
疑惑3:更新と参照が混ざったら遅くなるんでしょ?
• クラウドサービスレイヤに、メタデータ管理用のスケーラブルかつトランザクショナルなKVS
(FoundationDB)を持っていて、Snowflake内の全ての処理状況を管理
• そのためSnowflakeはACIDを担保していながら、内部処理は全てステートレスで、
Design for Failureなアーキテクチャデザイン
クラウド
サービス
バーチャル
ウェアハウス
メタデータ管理KVS
ロードバランサ
ストレージ
クライアント
KVS上に持つトランザクショ
ンステータスの更新をコミット
したらトランザクション確定
- 25. © 2021 NTT DATA Corporation 25
疑惑3:更新と参照が混ざったら遅くなるんでしょ?
一番外側の層(クラウドサービスレイヤ):
目立たないけど、実は非常に重要な役割
- 26. © 2021 NTT DATA Corporation 26
疑惑3:更新と参照が混ざったら遅くなるんでしょ?
遅くならない!
混合ワークロードにも強い!
実際どうなの?
- 27. © 2021 NTT DATA Corporation 27
3つの疑惑「実際どうなの?」
大人数で同時参照してもOK
更新のトランザクション担保OK
更新と参照の同時実行OK
- 28. © 2021 NTT DATA Corporation 28
これまでありがちだった状況
• 分析に必要なデータは、日次・週次・月次のバッチで連携され、分析は「ある静止点」をも
とに行われる
• 多くの人が同時に同じデータにアクセスできないため、データ分析は一部の人の特権
• 分析と業務の間に壁があり、分析結果を業務に活かすには高いハードルがある
データ分析の世界
一部の高度
な分析者
業務の世界
分析用データ
基幹系
データ
日次~月次バッチ
一般社員
- 29. © 2021 NTT DATA Corporation 29
Snowflakeで実現できる「データの民主化」
• 分析に必要なデータが、ニアリアルタイムでストリーム処理されて連携
• 大勢が一斉にアクセスしても問題がないため、全ての社員が同じデータを参照
• 分析と業務が一体で、分析結果をそのまま業務に活かせる
→組織の全員が「データドリブン」になるための準備が整う!
業務の世界
基幹系
データ
一般社員
一部の高度
な分析者
クラウド
データ
社外データ
ニアリアル
ニアリアル
ニアリアル
- 30. © 2021 NTT DATA Corporation 30
Snowflakeで実現できる「データの民主化」
Snowflakeって実際どうなの?を探ったら
新しい世界が見えてきた・・・!