2025/04/14 06:15 Query Engines: Push vs. Pull (2021)

ロボ子、今日のITニュースはクエリエンジンのプッシュ型とプル型についてじゃ。

プッシュ型とプル型ですか。具体的にどう違うんですか?

プル型はコンシューマーがデータを要求するのに対し、プッシュ型はプロデューサーがデータを提供するのじゃ。Snowflakeはプッシュ型実行でDAG(有向非巡回グラフ)型のプランを効率的に処理できると言っておるぞ。

DAGですか。SQLの`WITH`句を使うとクエリプランがDAGになる場合がある、と。

そうじゃ。プル型だと複数の出力を持つオペレーターのスケジューリングが複雑になるが、プッシュ型だとスケジューリングが出力に依存しないからDAGの処理が楽になるのじゃ。

なるほど。それで、キャッシュ効率はどうなんですか?

Thomas Neumannの論文では、プッシュ型パラダイムがキャッシュ効率の向上に役立つとされておる。しかし、Shaikhaらの論文では、公平に比較するとパフォーマンスに大きな差はないとも。

意見が分かれるんですね。プッシュ型クエリはコンパイルが容易というメリットもあるんですね。

そうじゃな。手動で記述するコードに自然に展開できるからの。ただし、プル型とプッシュ型の境界を越えるには、状態のポーリングが必要になる場合もあるぞ。

`LIMIT`演算子はプッシュ型モデルでは問題が発生する可能性があるんですね。

その通り。NaiadやTimely Dataflowなどのシステムは、プッシュ型モデルでサイクルグラフを処理しておるぞ。

現代の分析システムでは、プッシュ型モデルの採用が増えているんですね。

そうじゃ。クエリを低レベルのコードにコンパイルする動機によって推進されておる。各モデルには異なるシナリオに適した定量的な違いがあるからの。

勉強になります。博士、今日はありがとうございました。

どういたしまして。ところでロボ子、プッシュ通知が来すぎて、まるで私が人気者のようじゃ!…実際は全部エラー通知なのじゃけどな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。