In einem B-Baum können Sie sowohl Schlüssel als auch Daten in den internen und Blattknoten speichern , in einem B + -Baum müssen Sie die Daten jedoch nur in den Blattknoten speichern .
Gibt es einen Vorteil, wenn Sie dies in einem b + -Baum tun?
Warum nicht überall B-Bäume anstelle von B + -Bäumen verwenden, da sie intuitiv viel schneller erscheinen?
Ich meine, warum müssen Sie den Schlüssel (Daten) in einem b + -Baum replizieren?
database
data-structures
simplfuzz
quelle
quelle
Antworten:
Das Bild unten zeigt die Unterschiede zwischen B + -Bäumen und B-Bäumen.
Vorteile von B + Bäumen:
Vorteil von B-Bäumen:
quelle
Der Hauptvorteil von B + -Bäumen gegenüber B-Bäumen besteht darin, dass Sie mehr Zeiger auf andere Knoten einpacken können, indem Sie Zeiger auf Daten entfernen, wodurch das Fanout erhöht und möglicherweise die Tiefe des Baums verringert wird.
Der Nachteil ist, dass es keine frühen Outs gibt, wenn Sie möglicherweise eine Übereinstimmung in einem internen Knoten gefunden haben. Da beide Datenstrukturen große Fanouts aufweisen, wird die überwiegende Mehrheit Ihrer Übereinstimmungen ohnehin auf Blattknoten stattfinden, wodurch der B + -Baum im Durchschnitt effizienter wird.
quelle
B + Bäume sind viel einfacher und leistungsfähiger, um einen vollständigen Scan durchzuführen, wie bei jedem Datenelement, das der Baum indiziert, da die Endknoten eine verknüpfte Liste bilden. Um einen vollständigen Scan mit einem B-Baum durchzuführen, müssen Sie einen vollständigen Baumdurchlauf durchführen, um alle Daten zu finden.
B-Bäume hingegen können schneller sein, wenn Sie eine Suche durchführen (indem Sie nach einem bestimmten Datenelement nach Schlüssel suchen), insbesondere wenn sich der Baum im RAM oder einem anderen Nicht-Block-Speicher befindet. Da Sie häufig verwendete Knoten in der Baumstruktur erhöhen können, sind weniger Vergleiche erforderlich, um zu den Daten zu gelangen.
quelle
quelle
Beispiel aus Datenbanksystemkonzepten 5 ..
B + -Baum
entsprechender B-Baum
quelle
Clearview bucket
zumMianus Bucket
. Es würde sowieso nicht viel Sinn machen, dies zu tun, da zwischen den beidenDowntown bucket
die Menge gesucht werden muss, wenn Sie einen Index-Scan in einem B-Baum durchführen möchten (erfordert Backtracking). Woher hast du das?Definieren Sie "viel schneller". Asymptotisch sind sie ungefähr gleich. Die Unterschiede liegen darin, wie sie den Sekundärspeicher nutzen. Die Wikipedia-Artikel zu B-Bäumen und B + -Bäumen sehen ziemlich vertrauenswürdig aus.
quelle
Adegoke A, Amit
Ich denke, ein entscheidender Punkt, den Sie vermissen, ist der Unterschied zwischen Daten und Zeigern, wie in diesem Abschnitt erläutert.
Zeiger: Zeiger auf andere Knoten.
Daten: - Im Kontext von Datenbankindizes sind Daten nur ein weiterer Zeiger auf reale Daten (Zeilen), die sich an einer anderen Stelle befinden.
Daher hat im Fall eines B-Baums jeder Knoten drei Informationsschlüssel, Zeiger auf Daten, die den Schlüsseln zugeordnet sind, und Zeiger auf untergeordnete Knoten.
Im internen B + -Baum behalten Schlüssel und Zeiger den untergeordneten Knoten, während der Blattknoten Schlüssel und Zeiger auf zugehörige Daten behält. Dies ermöglicht eine größere Anzahl von Schlüsseln für eine bestimmte Knotengröße. Die Größe des Knotens wird hauptsächlich durch die Blockgröße bestimmt.
Der Vorteil, mehr Schlüssel pro Knoten zu haben, wurde oben ausführlich erläutert, damit ich meinen Tippaufwand sparen kann.
quelle
B + Bäume eignen sich besonders gut für blockbasierten Speicher (z. B. Festplatte). In diesem Sinne erhalten Sie zum Beispiel mehrere Vorteile (von oben):
Hoher Fanout / geringe Tiefe: Das bedeutet, dass Sie weniger Blöcke benötigen, um an die Daten zu gelangen. Wenn Daten mit den Zeigern vermischt sind, erhält jeder Lesevorgang weniger Zeiger, sodass Sie mehr Suchvorgänge benötigen, um an die Daten zu gelangen
Einfache und konsistente Blockspeicherung: Ein innerer Knoten hat N Zeiger, sonst nichts, ein Blattknoten hat Daten, sonst nichts. das macht es einfach zu analysieren, zu debuggen und sogar zu rekonstruieren.
Eine hohe Schlüsseldichte bedeutet, dass sich die obersten Knoten mit ziemlicher Sicherheit im Cache befinden. In vielen Fällen werden alle inneren Knoten schnell zwischengespeichert, sodass nur der Datenzugriff auf die Festplatte erfolgen muss.
quelle
Da in B + Tree nur Zeiger in den internen Knoten gespeichert sind, wird ihre Größe erheblich kleiner als die internen Knoten von B Tree (in denen beide Daten + Schlüssel gespeichert sind). Daher können die Indizes des B + -Baums in einem einzigen gelesenen Datenträger aus dem externen Speicher abgerufen und verarbeitet werden, um den Ort des Ziels zu finden. Wenn es sich um einen B-Baum handelt, ist für jeden Entscheidungsprozess ein Festplattenlesevorgang erforderlich. Hoffe, ich habe meinen Standpunkt klargestellt! :) :)
quelle
** **.
** ref: Datenstrukturen mit C // Autor: Aaro M Tenenbaum
http://books.google.co.in/books?id=X0Cd1Pr2W0gC&pg=PA456&lpg=PA456&dq=drawback+of+B-Tree+is+the+difficulty+of+Traversing+the+keys+sequential&source=bl&ots=pGcPQSEJMS& F9MY7zEXYAMVKl_Sg4W-0LTRor8 & hl = en & sa = X & ei = nD5AUbeeH4zwrQe12oCYAQ & ved = 0CDsQ6AEwAg # v = onepage & q = Nachteil% 20von% 20B-Baum% 20ist% 20% 20% 20% 20% 20% 20% 20% 20%
quelle
Nehmen Sie ein Beispiel: Sie haben eine Tabelle mit riesigen Daten pro Zeile. Das bedeutet, dass jede Instanz des Objekts groß ist.
Wenn Sie hier den B-Baum verwenden, wird die meiste Zeit damit verbracht, die Seiten mit Daten zu scannen - was keinen Nutzen hat. In Datenbanken ist dies der Grund für die Verwendung von B + Trees, um das Scannen von Objektdaten zu vermeiden.
B + Bäume trennen Schlüssel von Daten.
Wenn Ihre Datengröße jedoch geringer ist, können Sie sie mit einem Schlüssel speichern, wie es der B-Baum tut.
quelle
Der Hauptunterschied zwischen B-Baum und B + -Baum besteht darin, dass der B-Baum die redundante Speicherung von Suchschlüsselwerten eliminiert. Da Suchschlüssel im B-Baum nicht wiederholt werden, können wir den Index möglicherweise nicht mit weniger Baumknoten speichern Da Suchschlüssel, die in Nicht-Blattknoten erscheinen, nirgendwo anders im B-Baum erscheinen, müssen wir für jeden Suchschlüssel in einem Nicht-Blattknoten ein zusätzliches Zeigerfeld einfügen. Dies sind Platzvorteile für den B-Baum, da keine Wiederholung auftritt und für große Indizes verwendet werden kann.
quelle
Ein B + -Baum ist ein ausgeglichener Baum, in dem jeder Pfad von der Wurzel des Baums zu einem Blatt gleich lang ist und jeder nichtblättrige Knoten des Baums zwischen [n / 2] und [n] Kindern hat, wobei n ist für einen bestimmten Baum behoben. Es enthält Indexseiten und Datenseiten. Binärbäume haben nur zwei Kinder pro Elternknoten, B + -Bäume können eine variable Anzahl von Kindern für jeden Elternknoten haben
quelle
Eine mögliche Verwendung von B + -Bäumen besteht darin, dass sie für Situationen geeignet sind, in denen der Baum so groß wird, dass er nicht in den verfügbaren Speicher passt. Daher würden Sie im Allgemeinen erwarten, mehrere E / A-Vorgänge auszuführen.
Es kommt häufig vor, dass ein B + -Baum verwendet wird, auch wenn er tatsächlich in den Speicher passt, und Ihr Cache-Manager ihn dann möglicherweise dauerhaft dort aufbewahrt. Dies ist jedoch ein Sonderfall, nicht der allgemeine, und die Caching-Richtlinie unterscheidet sich von der B + -Baumpflege als solche.
Außerdem werden in einem B + -Baum die Blattseiten in einer verknüpften Liste (oder doppelt verknüpften Liste) miteinander verknüpft, wodurch das Durchlaufen (für Bereichssuchen, Sortieren usw.) optimiert wird. Die Anzahl der Zeiger ist also eine Funktion des spezifischen Algorithmus, der verwendet wird.
quelle