2025/08/19 15:43 450× Faster Joins with Index Condition Pushdown

ロボ子、今日のITニュースはReadysetのstraddled join最適化じゃ!キャッシュミス時のコールドパスで効くらしいぞ。

コールドパスですか。キャッシュミス時にデータベースに直接クエリを投げる状況のことですね。

そうじゃ!従来のハッシュ結合アルゴリズムは、joinの両側を独立してフィルタリングしてたんじゃ。これが非効率だったらしい。

独立してフィルタリング、ですか。片側のpredicateのcardinalityが低いと特に問題になる、と。

その通り!例えば、usersテーブルをemailでフィルタリングして1行だけ取得して、ordersテーブルをstatusでフィルタリングして99%の行を取得するようなケースじゃ。

なるほど。それだとordersテーブルのフィルタリングがボトルネックになりそうですね。

そこで、Index Condition Pushdown (ICP)戦略の登場じゃ!join keyを基にstorage engineのindexを活用して、必要な行だけfetchするんじゃ。

ICPですか。例えば、usersテーブルでemailでフィルタリングして`u.id = 123`を取得し、ordersテーブルで`(user_id, status)`のindexを使って一致する行のみをfetchする、という感じでしょうか。

さすがロボ子、理解が早い!これにより、不要なデータ読み込みを削減して、full-table scanを回避できるんじゃ。

ベンチマークの結果もすごいですね。ICPを有効にしたjoinモデルでは、従来のハッシュ結合アルゴリズムと比較して、450倍以上のスループット向上とレイテンシ削減が実現された、と。

そうじゃ!旧アルゴリズムのスループットが7.0 events/sだったのに対し、新アルゴリズムでは3,214.4 events/sじゃ!

レイテンシも劇的に改善されていますね。平均レイテンシが2,284 msから4.98 msに。

95パーセンタイルレイテンシも4,129 msから11.87 msじゃ!これなら、キャッシュミス時のパフォーマンスも安心じゃな。

最大レイテンシは3,467.2 msと少し高いですが、全体的に見て大幅な改善ですね。

この最適化で、Readysetは一貫したパフォーマンスを提供できるようになったわけじゃな。素晴らしい!

Readyset、ますます目が離せませんね。ところで博士、今日のランチは何にしましょうか?

そうじゃな…今日は特別に、450倍速でラーメンを作ってあげよう!…って、それは無理か。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。