B-Trees werden am häufigsten für Datenbankindizes auf der Festplatte verwendet, haben jedoch angesichts der modernen Speicherhierarchie mit mehreren Cache-Schichten und virtuellem Speicher Vorteile auch als speicherinterne Datenstruktur. Auch wenn sich der virtuelle Speicher auf einer SSD befindet, wird sich dies nicht ändern.
Ich verwende eine speicherinterne B + -Baumbibliothek, die ich ziemlich oft in C ++ geschrieben habe. Es kann Leistungsvorteile haben - der Grund, warum es ursprünglich geschrieben wurde, war der Versuch, den Cache besser zu nutzen - aber ich muss zugeben, dass es oft nicht so funktioniert. Das Problem ist der Kompromiss, der bedeutet, dass sich Elemente beim Einfügen und Löschen innerhalb von Knoten bewegen müssen, was bei binären Bäumen nicht der Fall ist. Außerdem haben einige der Low-Level-Coding-Hacks, die ich zur Optimierung verwendet habe, den Optimierer verwirrt und besiegt, wie die Wahrheit sagt.
Selbst wenn Ihre Datenbanken auf einer SSD gespeichert sind, handelt es sich dennoch um ein blockorientiertes Speichergerät, und die Verwendung von B-Trees und anderen Multiway-Bäumen bietet immer noch einen Vorteil.
ABER vor ungefähr zehn Jahren wurden Cache-vergessene Algorithmen und Datenstrukturen erfunden. Diese berücksichtigen nicht die Größe und Struktur von Caches usw. - sie machen (asymptotisch) die bestmögliche Verwendung jeder Speichererbschaft. B-Bäume müssen auf eine bestimmte Speicher-Hierarchie "abgestimmt" werden, um die bestmögliche Nutzung zu erzielen (obwohl sie für eine Vielzahl von Variationen recht gut funktionieren).
Zwischenspeicherunabhängige Datenstrukturen werden in der Natur noch nicht oft oder überhaupt nicht gesehen, aber es kann durchaus sein, dass sie die üblichen speicherinternen Binärbäume überflüssig machen. Und sie können sich auch für Festplatten und SSDs als lohnenswert erweisen, da es ihnen egal ist, wie groß die Cluster- oder Festplatten-Cache-Seiten sind.
Das Layout von Van Emde Boas ist sehr wichtig für Datenstrukturen, die keinen Cache benötigen.
Der MIT OpenCourseware-Algorithmuskurs enthält einige Informationen zu Datenstrukturen, die für den Cache nicht relevant sind.