取り合いがなければ、担当を16人に増やすと16.0倍速くなります。
5%が取り合うだけで9.1倍に落ちます。分ける構成の値打ちは、この差にあります。
データを配り直さずに、計算の側だけを分けられます。分けた側どうしは干渉しません。
Snowflakeの構成は、公式が2つの側面から説明しています。
ディスクを共有する構造と同じく、Snowflakeは、platformのすべての計算の節から到達できる、永続化されたデータのための中央の格納庫を使うという記述です。
計算の側は分けます。公式は仮想倉庫とは、Snowflakeで計算資源をひとまとめにしたものであると定めています。
3番目が次の節で測る対象です。取り合いがあるかないかで、増やす効き目が変わります。
書き込みを1つの実体が担う形では、そこが上限になります。その構成はAmazon Auroraの記事で扱いました。
分ける形では、読みのまとまりを増やしても書き込み側に影響しません。代わりに、まとまりごとに費用が立ちます。
Similar to shared-disk architectures, Snowflake uses a central data repository for persisted data that is accessible from all compute nodes in the platform.原文Snowflake 公式ドキュメント「Key concepts and architecture」 この内容の有効期限2027-02-18
並列に効かせるには、取り合う部分をなくす必要があります。少しでも残ると効きが削れます。
Snowflakeの処理は分散して行われます。公式はSnowflakeは大規模並列処理の計算のまとまりを使って問い合わせを処理し、まとまりの中の各節はデータ集合の一部を手元に保持すると説明しています。
分散が効くかどうかは、取り合う部分が残っているかで決まります。その分を数えました。
処理 4000件。1件 2ms。同じ行を取り合う分は順番待ちになる 取り合う割合を変えて、担当を増やしたときの短縮を見る 取り合う割合 1人 2人 4人 8人 16人 16人での短縮 0% 8.00秒 4.00秒 2.00秒 1.00秒 0.50秒 16.0倍 5% 8.00秒 4.20秒 2.30秒 1.35秒 0.88秒 9.1倍 20% 8.00秒 4.80秒 3.20秒 2.40秒 2.00秒 4.0倍 50% 8.00秒 6.00秒 5.00秒 4.50秒 4.25秒 1.9倍
1行目が、取り合いのない場合です。16人で16.0倍、まったく損がありません。
5%が取り合うと9.1倍です。5%という小さな割合で、効きが43%削られます。
計算のまとまりを分ければ、まとまりの間では取り合いが起きません。同じ置き場所を読むだけだからです。
残るのはまとまりの中と、書き込みが同じ対象に当たる場合です。ここが1行目と2行目の差になります。
だから分ける単位は、取り合う処理どうしを別のまとまりに置くように決めます。取り込みと集計を分けるのが典型です。
5%の取り合いで、16倍が9.1倍まで落ちる。
Snowflake processes queries using massively parallel processing (MPP) compute clusters, where each node in the cluster stores a portion of the entire data set locally.原文Snowflake 公式ドキュメント「Key concepts and architecture」 この内容の有効期限2027-02-18
列ごとに並べ直されているので、使う項目だけを読めます。全項目を選ぶとその利点が消えます。
Snowflakeは、取り込んだデータを並べ直します。公式はデータがSnowflakeの表に読み込まれると、Snowflakeはそのデータを、内部で最適化され、圧縮された、列ごとの形式へ組み替えると説明しています。
列ごとなので、使う項目だけを読めます。どれだけの差になるかを数えました。
表 200,000行・1行あたり 12項目(1項目 4バイト) 集計に使う項目の数を変えて、読む量を見る 使う項目 行ごとに持つ形 列ごとに持つ形 比 1個 9.2MB 0.8MB 12.0倍 2個 9.2MB 1.5MB 6.0倍 3個 9.2MB 2.3MB 4.0倍 6個 9.2MB 4.6MB 2.0倍 12個 9.2MB 9.2MB 1.0倍
1項目なら12.0倍の差です。12項目すべてを使えば1.0倍になります。
公式が挙げている圧縮の分は、この計測に入っていません。実際にはさらに小さくなります。
この構成では、費用が2つに分かれます。置いておく量と、計算を動かした時間です。
読む量は、後者に効きます。読む量が減れば処理が早く終わり、動かす時間が短くなります。
前者は、置いた量そのものです。読み方を変えても減りません。減らすには古いものを消すことになります。
同じ分かれ方はBigQueryの記事でも扱いました。読む量と置く量は別勘定です。
取り合いの計算は単純な形に置いています。取り合う分は同時に1人しか進めないものとし、待ちの詳細は入れていません。読む量も項目の数からの計算で、圧縮の効きは含めていません。1項目4バイトという値も置いたものです。ここで見せているのは、少しの取り合いが並列の効きを大きく削ること、読む量が使う項目の数で決まることの2つです。
When data is loaded into a Snowflake table, Snowflake reorganizes that data into its internally optimized, compressed, columnar format.原文Snowflake 公式ドキュメント「Key concepts and architecture」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る