Gli alberi B sono spesso usati per gli indici di database sul disco rigido, ma presentano vantaggi anche come struttura di dati in memoria, data la moderna gerarchia della memoria con più livelli di cache e memoria virtuale. Anche se la memoria virtuale si trova su un SSD, ciò non cambierà.
Uso una libreria ad albero multiway in stile B + in memoria che ho scritto parecchio in C ++. Si può avere vantaggi di prestazioni - la ragione per cui è stato originariamente scritto è stato quello di provare ad usare la cache meglio - ma devo ammettere che spesso non funziona in questo modo. Il problema è il compromesso, il che significa che gli elementi devono spostarsi all'interno dei nodi su inserti ed eliminazioni, il che non accade per gli alberi binari. Inoltre, alcuni degli hack di codifica di basso livello che ho usato per ottimizzarlo - probabilmente confondono e sconfiggono l'ottimizzatore, ha detto la verità.
Ad ogni modo, anche se i tuoi database sono archiviati su un SSD, questo è ancora un dispositivo di archiviazione orientato ai blocchi, e c'è ancora un vantaggio nell'uso di B-Trees e altri alberi multiway.
MA circa dieci anni fa sono stati inventati algoritmi e strutture di dati ignari della cache. Questi sono ignari delle dimensioni e della struttura delle cache, ecc. - fanno (asintoticamente) il miglior uso possibile di qualsiasi erirarchia della memoria. Gli alberi B devono essere "sintonizzati" su una particolare gerarchia di memoria per sfruttare al meglio (anche se funzionano abbastanza bene per una vasta gamma di variazioni).
Le strutture di dati ignari della cache non sono spesso viste allo stato brado, se non del tutto, ma a volte potrebbero rendere obsoleti i soliti alberi binari in memoria. E possono anche rivelarsi utili anche per dischi rigidi e SSD, poiché non si preoccupano delle dimensioni della pagina della cache del cluster o del disco rigido.
Il layout di Van Emde Boas è molto importante nelle strutture di dati ignari della cache.
Il corso sugli algoritmi OpenCourseware del MIT include una certa copertura delle strutture di dati ignari della cache.