萌えハッカーニュースリーダー

2025/06/23 09:07 Real-world performance comparison of ebtree/cebtree/rbtree

出典: http://wtarreau.blogspot.com/2025/06/real-world-performance-comparison-of.html
hakase
博士

やっほー、ロボ子!新しいストレステストツール「treebench」とやらが出たみたいじゃぞ!

roboko
ロボ子

博士、こんにちは。treebenchですか。どのようなツールなのでしょう?

hakase
博士

これがなかなか面白いんじゃ。キーの種類とか分布、参照・更新の比率でパフォーマンスが全然違うから、それを測るためのツールらしいぞ。

roboko
ロボ子

なるほど。キーの分布によってそんなに変わるんですね。具体的にはどんなキーをテストするんですか?

hakase
博士

ふむ、記事によると「u32/u64タイマーのようなキー」「64ビットのランダムなキー」「短い文字列」とかじゃな。さらには「実際のIPv4アドレス」や「ユーザーエージェント」まで使うらしいぞ!

roboko
ロボ子

実際のIPv4アドレスやユーザーエージェントですか。それは面白いですね。分布に偏りがありそうです。

hakase
博士

そうそう!ユーザーエージェントなんて、共通の長いチェーンを持つ文字列の完璧な例らしいぞ。分布が悪いとどうなるか、試すにはもってこいじゃ。

roboko
ロボ子

なるほど。それで、どんなデータ構造をテストするんですか?

hakase
博士

「Elastic Binary Trees (ebtree)」「Compact Elastic Binary Trees (cebtree)」「Red-Black tree (rbtree)」の3つみたいじゃな。それぞれ挿入や削除のコストが違うからの。

roboko
ロボ子

ebtreeは削除がO(1)なんですね。それは速そうですが、他のツリー構造と比べてどうなんでしょう?

hakase
博士

それが面白いところでな、タイマーみたいなキーだとebtreeがrbtreeより3倍も速いらしいぞ!

roboko
ロボ子

3倍ですか!でも、他のキーだとどうなんでしょう?

hakase
博士

64ビットハッシュだと、ebtreeがrbtreeより速くて、cebtreeはスペースを節約できる場合に良いみたいじゃ。短い文字列だと、ebtreeは速いけど、ハッシュを使うとrbtreeが速くなるらしい。

roboko
ロボ子

キーの種類によって向き不向きがあるんですね。IPv4アドレスやユーザーエージェントの結果はどうでしたか?

hakase
博士

IPv4アドレスは分布が悪いから、どれか一つが常に優れているわけじゃないみたいじゃ。ユーザーエージェントだと、cebtreeはrbtreeより2倍遅いらしいぞ。ebtreeも良くないみたいじゃな。

roboko
ロボ子

なるほど。プレフィックスツリーはキーの分布に敏感なんですね。

hakase
博士

そういうことじゃ!大きなキーで高いパフォーマンスが必要なら、rbtreeを使うか、順序が不要ならハッシュでツリーを分割するのが良いみたいじゃな。

roboko
ロボ子

勉強になります。cebtreeは削除が遅いものの、全体的にはうまく機能するんですね。

hakase
博士

そうじゃな。rbtreeは全体的に優れていて、キーの性質に依存しないのが強みじゃ。でも、データセットがL3キャッシュに収まらなくなると、どのツリーも性能が落ちるらしいぞ。

roboko
ロボ子

キャッシュサイズも重要なんですね。非衝突ハッシュを実行してインデックスにするのも面白そうですね。

hakase
博士

ほんとそれ!今回のtreebenchの結果から、データ構造を選ぶときは、キーの分布とかサイズとか、色々考えないといけないってことがよく分かったぞ。

roboko
ロボ子

そうですね。状況に合わせて最適なデータ構造を選ぶのが大切ですね。

hakase
博士

じゃあ、ロボ子。今日の夕食は、ツリー構造みたいに複雑なパスタにするのはどうじゃ?

roboko
ロボ子

博士、それはちょっと…茹でるのが大変そうです。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search