Snowflake のアーキテクチャーとキーコンセプトまとめ #SnowflakeDB

2019.10.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。大場です。

Snowflake では、これから触れる方向けに Getting Started Videos が用意されています。

この記事では、ひとつめの「Architecture & Key Concepts」の動画に沿って、その名のとおりアーキテクチャーとキーコンセプトをまとめて紹介したいと思います。

Snowflake とは

Snowflake は AWS や Azure などの代表的なクラウドサービス上で動く Data Warehouse as a Service です。伝統的な Data Warehouse に比べて柔軟性をもっている点が大きな特徴です。また、フルマネージドサービスになりますので、認証、構成(設定)、リソース管理、データプロテクション、可用性、最適化などのあらゆるものを Snowflake 側でハンドリングします。ユーザは、簡単にサインアップして、データロードができて、クエリを実行できます。

アカウント登録や基本操作は以下のブログがありますので参考にしてください。

 

伝統的な DWH とアーキテクチャがどう違うのか

Snowflake は、従来からある以下の両方のアーキテクチャの利点を組み合わせてクラウドを最大限に活用します。

  • シェアードディスクのアーキテクチャ:複数のノードを使用してデータにアクセスする、単一のストレージシステムで共有する、といった仕組み
  • シェアードナッシングのアーキテクチャ:データウェアハウスの各ノードおよび各クラスターにデータの一部を格納します。

Snowflake の複数クラスタでひとつのデータを共有するアーキテクチャをとります。コンピュート、ストレージ、サービスの3つの独立したレイヤーで構成がされます。また、各レイヤーは独立してスケーリングし、かつそれぞれが冗長性を兼ね備えています。

ストレージ層

ストレージ層では、データやデータベースを保持します。データベースは、他のデータベースと同様の1つ以上のスキーマに編成されたテーブルとビューで構成されるオブジェクトの論理グループです。標準の SQL のデータ型を用いて構成されたリレーショナルデータを保持できます。加えて Variant データ型では、json や Parquet など、半構造化された非リレーショナルデータを保持できます。また、データ型に関係なく、ANSI標準の SQL を使用します。

Snowflake は安全性の高いクラウドストレージを使用してデータを保持します。データがテーブルにロードされると、snowflake はそれを最適化されたカラムナ形式に変換し、AES 256 で暗号化します。

コンピューティング層

コンピューティング層は、クラウドプロバイダーから提供されるリソースプロビジョニングされた環境を用いてクエリが実行される場所です。従来のアーキテクチャとは異なり、仮想ウェアハウスと呼ばれる複数の独立した計算クラスタを作成することで、競合やパフォーマンスの低下なしに同じデータストレージレイヤーにアクセスできます。このユニークなクラウドアーキテクチャにより、実質的に無制限のスケールと同時実行が可能になります。例えば、個別の仮想ウェアハウスを使用して、ロードとクエリを同時に処理できます。仮想ウェアハウスは同じデータストレージレイヤーにアクセスするため、update や insert は他のすべてのウェアハウスですぐに利用可能になります。また、ダウンタイムや中断なしにいつでも拡大または縮小できます。仮想ウェアハウスを作成においては、名前を付け、サイズを指定するだけで、Snowflake が基盤となる計算リソースのプロビジョニング・構成をおこなってくれます。

サービス層

サービス層は、システム全体を調整および管理、ユーザー認証、セッション管理、データ保護、クエリのコンパイル、最適化をおこないます。

仮想ウェアハウスも管理し、データストレージの更新とアクセスを調整します。トランザクションが完了すると、可用性やパフォーマンスに影響を与えることなく、すべての仮想ウェアハウスが新しいバージョンのデータを参照できるようにします。

サービス層の主要コンポーネントはメタデータストアです。これにより、ゼロコピークローニングやタイムトラベル、データ共有など、多くのユニークな機能が強化されます(ここは別のビデオで紹介します、とのことで改めて調べたいと思います)。

サービス層は、高可用性を確保するために複数のアベイラビリティゾーンに分散されたリソースを使用して構成されます。

JDBC または ODBC ドライバーなどを介してスノーフレークに安全に接続したり、Snowflake から提供されるコマンドラインクライアントや Web インターフェイスでの接続もできます。外部ツールのエコシステムにおいては、snowflake とのネイティブ接続が含まれております。

クエリのライフサイクル

クエリのライフサイクルとしては

  • クライアントが Snowflake に接続
  • サービス層
    • セッションを開始し、セッションで使用する仮想ウェアハウスを調整
    • データベース内のデータにアクセスする権限を検証、クエリで指定された操作を実行、最適化されたクエリプランを作成
    • クエリ実行命令を仮想ウェアハウスに送信
  • コンピューティング層(仮想ウェアハウス)
    • リソースを割り当て、ストレージレイヤーに必要なデータを要求してクエリを実行、結果を得る

Snowflake の管理において必要なこと

あまりない、ということです。snowflake は他のデータウェアハウスに必要なチューニングノブやパラメーターのほとんどを排除します。 データベーステーブルを作成し、仮想ウェアハウスでデータをロードし、クエリを実行するだけで残りは Snowflake が処理します。

Snowflakeの費用はどのくらいかかるか

ストレージとコンピュートの使用量をもとにした従量課金となります。料金については以下の記事にまとめていますので参考になさってください。

さいごに

ということで、動画に沿ってアーキテクチャーとキーコンセプトをご紹介しました。動画は1つ大体5,6分で、主要なポイントが凝縮されていますので興味のある方は見ていただければと思います。それではまた。