Główną zaletą drzewa B + (i drzewek B w ogóle) w drzewach binarnych jest to, że dobrze współpracują z pamięcią podręczną. Jeśli masz binarne drzewo wyszukiwania, którego węzły są przechowywane w mniej więcej losowej kolejności w pamięci, to za każdym razem, gdy podążasz za wskaźnikiem, maszyna będzie musiała wciągnąć nowy blok pamięci do pamięci podręcznej procesora, która jest znacznie wolniejsza niż dostęp do pamięci już w pamięci podręcznej.
B + -tree i B-tree działają, ponieważ każdy węzeł przechowuje ogromną liczbę kluczy lub wartości i ma dużą liczbę dzieci. Zazwyczaj są one pakowane razem w taki sposób, aby pojedynczy węzeł ładnie mieścił się w pamięci podręcznej (lub, jeśli jest przechowywany na dysku, aby został pobrany z dysku w pojedynczej operacji odczytu). Następnie musisz wykonać więcej pracy, aby znaleźć klucz w węźle lub określić, które dziecko będzie czytać dalej, ale ponieważ wszystkie dostępy do pamięci wykonane w jednym węźle można wykonać bez powrotu do dysku, czasy dostępu są bardzo małe. Oznacza to, że nawet jeśli zasadniczo BST może być lepszy pod względem dostępu do pamięci pod numerem o numerze, B + -tree i B-drzewo mogą działać lepiej pod względem runtime dostępu do pamięci.
Typowy przypadek użycia dla drzewa B + lub drzewa B znajduje się w bazie danych, w której znajduje się ogromna ilość informacji, a dane są tak liczne, że nie wszystkie mieszczą się w pamięci głównej. W związku z tym dane mogą być przechowywane w drzewie B + lub drzewie B na dysku twardym. Minimalizuje to liczbę odczytów dysku potrzebnych do wciągnięcia danych podczas wyszukiwania. Niektóre systemy plików (jak na przykład ext4, jak sądzę) również używają B-drzew z tego samego powodu - minimalizują liczbę niezbędnych wyszukiwań na dysku, co jest prawdziwym wąskim gardłem.
Mam nadzieję, że to pomoże!
Świetna odpowiedź, dziękuję! – riggspc
Nie jestem w stanie zrozumieć stwierdzenia "drzewo B może działać lepiej pod względem runtime dostępu do pamięci". Czy możesz to wyjaśnić? – Zephyr
@ Xylene23 Nie wszystkie dostępy do pamięci zabierają tyle samo czasu z powodu efektów buforowania.BST dotyka mniej miejsc w pamięci na odnośnikach niż drzewa B, ale koszt tych wejść jest wysoki, ponieważ każdy dostęp może kosztować brak pamięci podręcznej. Drzewo B dotyka więcej całkowitych lokalizacji pamięci, ale koszty dostępu do nich są niższe, ponieważ będzie mniejszy brak pamięci podręcznej. – templatetypedef