第1章 Snowflake AI Data Cloudの特徴とアーキテクチャ(Features & Architecture, 31%)
🎯 この節の学習目標
Snowflake のアーキテクチャを理解する出発点として、従来のデータベースが採用してきた2つの設計を押さえておきましょう。
| shared-disk(共有ディスク) | shared-nothing(非共有) | |
|---|---|---|
| 仕組み | 複数の計算ノードが1つの共有ストレージにアクセスする。データ管理がシンプル | 各ノードが自分専用のストレージを持ち、データを分散して処理する。並列処理に強い |
| 弱点 | ノードを増やすと共有ストレージへのアクセスが競合し、性能が頭打ちになりやすい | 計算資源とデータが一体化しているため、片方だけを増減できず、ノード追加時にはデータの再配置が必要になる |
Snowflake はこの2つの「いいとこ取り」をしたアーキテクチャを採用しています。すなわち、データは1か所の共有ストレージに置き(shared-disk 的)、クエリの処理は互いに独立した複数のコンピュートクラスタが超並列(MPP)で実行する(shared-nothing 的)という設計です。Snowflake はこれをマルチクラスタ共有データアーキテクチャ(multi-cluster, shared data architecture)と呼んでいます。
📝 試験のポイント
「Snowflake のアーキテクチャは shared-disk と shared-nothing のどちらか」という問い方がされることがあります。答えは「どちらか一方ではなく、両者のハイブリッド」です。ストレージは共有(shared-disk 的)、処理は各仮想ウェアハウスが独立して MPP 実行(shared-nothing 的)、という整理で覚えておきましょう。
Snowflake は、役割の異なる3つの層が疎結合に組み合わさってできています。上から順に見ていきます。
| 層 | 役割 | 主な機能 |
|---|---|---|
| ① クラウドサービス層 | プラットフォーム全体の「頭脳」として、各種サービスを調整する | 認証・アクセス制御、メタデータ管理、クエリの解析と最適化、トランザクション管理、結果キャッシュ |
| ② クエリ処理層(コンピュート層) | クエリを実際に実行する | 仮想ウェアハウス(virtual warehouse)と呼ばれるコンピュートクラスタが担当。各ウェアハウスは互いに独立し、性能に影響を与え合わない |
| ③ データベースストレージ層 | データを保存する | ロードされたデータを圧縮・暗号化された Snowflake 内部の最適化フォーマットに変換し、クラウドストレージに保存する |
図:Snowflake の3層構造。複数の仮想ウェアハウスが互いに独立しながら、同一の共有データにアクセスする
この図で重要なのは、仮想ウェアハウスが複数あっても、参照するデータは1つだという点です。ETL 処理が重いクエリを実行していても、BI 分析用のウェアハウスは影響を受けません。ワークロードごとにウェアハウスを分ける運用は、この独立性を活かした Snowflake の基本パターンです。
クラウドサービス層(Cloud Services Layer)は、ユーザーからのリクエストを最初に受け取り、プラットフォーム全体を調整する層です。試験対策として、この層が担う機能を正確に列挙できるようにしておきましょう。
| 機能 | 内容 |
|---|---|
| 認証・アクセス制御 | ログイン認証、ロールベースの権限チェック |
| メタデータ管理 | テーブル定義、統計情報、マイクロパーティションの情報などを一元管理 |
| クエリの解析と最適化 | SQL を解析し、実行計画を生成・最適化する(オプティマイザ) |
| トランザクション管理 | ACID トランザクションの調整 |
| 結果キャッシュ | 実行済みクエリの結果を保持し、同一クエリの再実行時にウェアハウスを使わず結果を返す |
💡 具体例:結果キャッシュはどの層で効くか
-- 1回目の実行:仮想ウェアハウスがクエリを処理する
SELECT region, SUM(amount)
FROM sales
GROUP BY region;
-- 2回目の実行(データ・クエリとも変更なし):
-- クラウドサービス層の結果キャッシュから即座に結果が返り、
-- 仮想ウェアハウスは起動すら不要(コンピュートクレジットを消費しない)
結果キャッシュはウェアハウスではなくクラウドサービス層に保持されるため、ウェアハウスを停止していてもヒットします。「どのキャッシュがどの層にあるか」は整理して覚えておきたいところです。
📝 試験のポイント
「次の機能はどの層が担当するか」という対応付けの問題が試験で問われやすい論点です。認証・メタデータ管理・クエリ最適化・トランザクション管理・結果キャッシュ=クラウドサービス層、クエリの実行=クエリ処理層(仮想ウェアハウス)、データの保存=ストレージ層と即答できるようにしておきましょう。
クエリ処理層(Query Processing Layer)では、仮想ウェアハウスと呼ばれるコンピュートクラスタがクエリを実行します。ここで押さえるべき性質は次の3つです。
| 性質 | 意味 |
|---|---|
| 互いに独立 | あるウェアハウスの負荷が、他のウェアハウスの性能に影響しない |
| 同一データを共有 | すべてのウェアハウスがストレージ層の同じデータにアクセスする。ウェアハウスごとにデータをコピーする必要はない |
| 独立してスケール | ストレージ量とは無関係に、ウェアハウスのサイズや数を増減できる。課金もストレージと別建て |
ストレージとコンピュートを独立にスケールでき、課金も別々という点は、Snowflake のアーキテクチャ上の利点として説明されやすいポイントです。「データ量は増えたが計算は少ない」「一時的に計算だけ増やしたい」といった状況に、それぞれの層だけを拡張して対応できます。仮想ウェアハウスのサイズや自動停止・自動再開などの詳細は 1-5 で扱います。
データベースストレージ層(Database Storage Layer)は、ロードされたデータを保存する層です。Snowflake にデータをロードすると、元のファイル形式のまま保存されるのではなく、圧縮され、暗号化された Snowflake 内部の最適化フォーマットに変換されて、基盤となるクラウドストレージに書き込まれます。
この内部フォーマットの実体であるマイクロパーティションの仕組みは、1-6 で詳しく学びます。
✅ この節のまとめ
問1. Snowflake のアーキテクチャの説明として最も適切なものはどれか。
正解:C
Snowflake のマルチクラスタ共有データアーキテクチャは、データを1か所の共有ストレージに置く点で shared-disk 的、独立したクラスタが超並列処理する点で shared-nothing 的な、両者のハイブリッドです。Aは競合による性能頭打ちという shared-disk の弱点をそのまま持つ説明で誤りです。Bは shared-nothing の説明であり、Snowflake ではデータとコンピュートが分離しているため再配置は不要です。Dはスケールしない従来型の構成で、Snowflake の設計とは正反対です。
問2. クラウドサービス層が担当する機能はどれか(2つ選べ)。
正解:A・C
クエリの解析・最適化と結果キャッシュは、いずれもクラウドサービス層の機能です。Bのクエリ実行はクエリ処理層(仮想ウェアハウス)、Dのデータ保存はデータベースストレージ層の役割です。本試験でも「2つ選べ」形式は多く出題されるため、層と機能の対応は複数同時に問われても答えられるように整理しておきましょう。
問3. 仮想ウェアハウスに関する説明として正しいものはどれか。
正解:B
仮想ウェアハウスは「互いに独立、ただしデータは共有」が核心です。Aは誤りで、データはストレージ層に1つだけ存在し、ウェアハウスはそれを参照します。Cも誤りで、複数のウェアハウスを同時に起動してワークロードを分離するのが標準的な使い方です。Dはウェアハウスの独立性と矛盾します。独立しているからこそ、ETL と BI 分析を別ウェアハウスに分ければ互いに干渉しません。
問4. Snowflake のデータベースストレージ層に関する説明として誤っているものはどれか。
正解:C
Snowflake 内部フォーマットで保存されたデータには SQL クエリを通じてのみアクセスでき、基盤のクラウドストレージ上のファイルを直接読むことはできません。したがってCが誤りです。A・Bはストレージ層の基本的な性質、Dはストレージとコンピュートの分離という Snowflake アーキテクチャの利点で、いずれも正しい説明です。