プロローグ
ほげ君:あーこの前のかつ丼美味かったなあ。
ふが君:Azure Synapse Analytics の話聞いた後行ったとこね。
ほげ君:前回は全体の概要だけ聞いたんだっけな。じゃあ今日は Synapse SQL についてもうちょっと教えてくれよ。
公式ドキュメント君:分かりました。
〇〇 概要
公式ドキュメント君:Synapse SQL では、スケールアウト アーキテクチャを使用して、複数のノードにデータの計算処理を分散します。 コンピューティングをストレージから切り離すことで、システム内のデータとは無関係に、コンピューティングをスケーリングできるようになります。
ほげ君:あ?何言ってんだ?なんも分からんぞ。
ふが君:んー、分散処理するから早いってことかな?
公式ドキュメント君:Synapse SQL は、ノードベースのアーキテクチャを使用します。 アプリケーションでは T-SQL コマンドに接続し、これを Synapse SQL の単一のエントリ ポイントである制御ノードに発行します。Azure Synapse SQL の制御ノードでは、分散クエリ エンジンを利用して並列処理のためにクエリが最適化された後、作業を並列で実行するために操作がコンピューティング ノードに渡されます。
ほげ君:制御ノード?コンピューティングノード?
ふが君:仕事を振り分ける人と渡された仕事を実際に行う人かな?
公式ドキュメント君:サーバーレス SQL プールの制御ノードは、分散クエリ処理 (DQP) エンジンを利用して、コンピューティング ノードで実行される小さなクエリにユーザー クエリを分割することにより、ユーザー クエリの分散実行の最適化と調整を行います。 この各小さなクエリはタスクと呼ばれ、分散実行の単位を表します。 タスクでは、ストレージからファイルを読み取り、他のタスクの結果、または他のタスクから取得したグループや注文データを結合します。
ほげ君:えーと、ユーザが依頼主で、なんか仕事を制御ノードに依頼して、制御ノードが依頼された仕事を小分けして、コンピューティングノードに渡すのか。
ふが君:このコンピューティングノードに渡される小分けされた仕事のことを「タスク」と呼ぶんだね。
公式ドキュメント君:コンピューティング ノードはすべてのユーザー データを Azure Storage に保存し、並行クエリを実行します。 Data Movement Service (DMS) はシステム レベルの内部サービスで、必要に応じて複数のノードにデータを移動し、クエリを並列に実行して、正確な結果を返します
ほげ君:データは別の場所に置いてあるのか。
ふが君:なんでそんなことするんだろう?一緒に置いた方が簡単なのに。
公式ドキュメント君:Synapse SQL を使用すると、ストレージとコンピューティングを分離することにより、ストレージのニーズに関係なく、コンピューティング能力を独立してサイジングできるという利点があります。 サーバーレス SQL プールのスケーリングは自動的に行われますが、専用 SQL プールでは次のことが可能です。
ふが君:そっか!データをどれぐらいの量置けるかとデータをどれぐらい早く処理できるかは全然違う能力だから、分離したほうが各能力を別々で調整できるから嬉しいのか!
ほげ君:なるほど!分かりやすいな。
公式ドキュメント君:サーバーレス SQL プールでは、データ レイク ファイルにクエリを実行できます。専用 SQL プールでは、クエリを実行し、データ レイク ファイルからデータを取り込むことができます。 データを専用 SQL プールに取り込むと、システムのパフォーマンスを最適化するために、データはディストリビューションにシャード化されます。 どのシャーディング パターンを使用して、テーブルを定義するときにデータを分散するかを選択できます。
ほげ君:シャード化ってなんだ?
ふが君:教えて、グーグル先生!
グーグル先生:シャーディングとは、データベースの負荷分散の手法の一つで、一つの表(テーブル)を複数の物理コンピュータに分割して記録する方式。
ほげ君:専用 SQL プールはデータを処理しやすいように小分けして持っておくのか。
ふが君:サーバレスはストレージのデータを処理するだけで、自分ではデータは持たないんだね。
ほげ君:こういうのってテクノロジーッて感じするよな。
ふが君:そうだね。
ほげ君:よし、腹減ったし辛ラーメン食おうぜ。
ふが君:いいね。