Bツリーは、ほとんどの場合、ハードディスクのデータベースインデックスに使用されますが、複数のキャッシュ層と仮想メモリを備えた最新のメモリ階層を考えると、メモリ内データ構造としても利点があります。仮想メモリがSSD上にある場合でも、それは変わりません。
私は、C ++で非常に多く書いたインメモリB +スタイルのマルチウェイツリーライブラリを使用します。それはパフォーマンス上の利点を持つことができます-元々書かれた理由はキャッシュをより良く使用しようとすることでした-しかし私はそれがしばしばそのように機能しないことを認めなければなりません。問題はトレードオフです。つまり、アイテムは挿入および削除のノード内を移動する必要があります。これはバイナリツリーでは発生しません。また、私がそれを最適化するために使用した低レベルのコーディングハックのいくつか-まあ、彼らはおそらくオプティマイザーを混乱させ、打ち負かす、と真実が語った。
とにかく、たとえデータベースがSSDに保存されていても、それは依然としてブロック指向のストレージデバイスであり、Bツリーや他のマルチウェイツリーを使用することには利点があります。
しかし、約10年前に、キャッシュを使用しないアルゴリズムとデータ構造が発明されました。これらは、キャッシュなどのサイズや構造を意識していません-メモリの階層を(漸近的に)可能な限り最適に使用します。Bツリーは、特定のメモリ階層に最適化するために「調整」する必要があります(ただし、非常に幅広いバリエーションでかなりうまく機能します)。
キャッシュ忘却型データ構造は、まだほとんど見られていませんが、そうではありませんが、通常のインメモリバイナリツリーは時代遅れになる可能性があります。また、クラスターサイズやハードディスクキャッシュのページサイズを気にしないので、ハードディスクやSSDにとっても価値があるかもしれません。
Van Emde Boasのレイアウトは、キャッシュを意識しないデータ構造において非常に重要です。
MIT OpenCoursewareアルゴリズムコースには、キャッシュ忘却型データ構造が含まれています。