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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

博士、それはちょっと…茹でるのが大変そうです。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。