B-Baum im Vergleich zu einem R-Baum - Ist es nicht nur eine Reihe von miteinander verknüpften verknüpften Listen?


10

Ich bin ziemlich vertraut mit einem B-Baum, da ich die Datenbanken hauptsächlich mit Strom, Klimaanlage und Festplattenspeicher versorgen muss. Ich verbinde mich mit einer doppelten (doppelten [dh ey]?) Verknüpften Liste.

Heute erwähnte einer der Entwickler beim Mittagessen einen R-Baum.

Ich hüpfte auf Wikipedia und fing an zu lesen. Es klang schrecklich wie ein größerer B-Baum. Leider ist es schwierig zu verstehen, worüber einige meiner Mitarbeiter sprechen, wenn sie keinen tiefen mathematischen Hintergrund haben.

Ich hatte gehofft, jemand könnte ein paar Unterschiede zwischen einem B-Baum und einem R-Baum klären. Ich werde die Jungs wahrscheinlich sowieso fragen, aber es gibt keine Garantie, dass sie meine Frage beantworten. Höchstwahrscheinlich werden sie anfangen, über Gott weiß was zu streifen. . .


Ein BTree ist definitiv keine doppelt verknüpfte Liste. Ein Baum ermöglicht den Zugriff in Protokolloperationen (n) anstelle von proportional zu n wie in Listen.
Javier

@Javier: Die Blattknoten eines B-Tree-Index sind normalerweise eine doppelt verknüpfte Liste, um das schnelle Abrufen von Indexknoten durch Geschwister zu ermöglichen.
Jordanien

1
Da es sich um eine rein technische Frage handelt, gehört dies zu StackOverflow (bitte veröffentlichen Sie es dort nicht erneut, es wird automatisch migriert, wenn genügend Leute abstimmen, um es hier zu schließen).
Péter Török

1
Dies ist hier ein Thema: Programmers.SE ist für Konzeptfragen zur Programmierung. Der Stapelüberlauf ist für den Fall gedacht, dass Sie tatsächlich Code haben, bei dem Sie Hilfe benötigen.

2
@ Peter Torok: Unter dem alten System wäre dies eine SO-Frage gewesen. Aber jetzt, wo diese Seite existiert.
Surfasb

Antworten:


6

Ein R-Baum kann als Verallgemeinerung eines B-Baums angesehen werden. Wenn ein B-Baum einen O (log n) -Zugriff über einen "begrenzten Bereich" der darin enthaltenen Schlüssel bereitstellt, bietet ein R-Baum einen O (log n) -Zugriff über einen "K-dimensionalen Bereich" der darin enthaltenen Schlüssel.

Wenn Sie Postleitzahlen Kreisnamen zuordnen möchten, können Sie einen B-Baum verwenden, da Sie ihn fragen können: "Was sind alle Landkreise mit Postleitzahlen zwischen 60000 und 61000?" Ein B-Tree wäre jedoch schlecht geeignet, um GPS-Koordinaten für Abfragen wie "Was sind alle Grafschaften innerhalb von 100 Meilen von Chicago?" Zu Kreisnamen abzubilden, da er seine Schlüssel nur in einer einzigen Dimension bestellt. Ein R-Tree teilt seine Schlüssel nach überlappenden Begrenzungsrahmen auf. Daher ist es eine natürliche Möglichkeit, Schlüssel zu speichern, wenn Sie in mehreren Dimensionen abfragen müssen.


Ich mag die Analogie.
Surfasb

1
Es ist eher ein konkretes Beispiel als eine Analogie. Genau so werden diese Indexalgorithmen verwendet.
SingleNegationElimination

6

Die meisten Baumstrukturen können auf eine Art verknüpfte Liste reduziert werden, solange Sie ignorieren, wie die Liste aufgebaut ist (insbesondere, wie Elemente hinzugefügt und entfernt werden und wie die Knoten gegebenenfalls neu ausgeglichen werden). Es ist im Wesentlichen der Einfüge- / Lösch- / Abrufalgorithmus, der eine Datenstruktur von einer anderen unterscheidet.

Knoten in einem R-Baum enthalten im Allgemeinen einen Begrenzungsrahmen, mit dem Sie Standorte effizient indizieren können, wenn Sie nach Datensätzen "in der Nähe" eines bestimmten Standorts suchen möchten. Elemente in einem B-Baum haben eine einfachere Reihenfolge; Sie können direkt vergleichen, ob etwas größer oder gleich einem anderen Element ist. In einem R-Baum dient jeder Eintrag dazu, zu bestimmen, welche Elemente in einem Begrenzungsrahmen enthalten sind.

Mit einem B-Tree können Sie effizient nach bestellbaren Elementen im Sekundärspeicher (wie einer Festplatte) suchen, und mit einem R-Tree können Sie effizient nach Elementen suchen, die sich "an" oder "in der Nähe" eines bestimmten Punkts oder Begrenzungsrahmens befinden im sekundären Speicher.


Es hört sich so an, als würde der R-Baum seine Unterscheidung zeigen, wenn die Anzahl der Elemente wächst, richtig? Oder ist das etwas zu vereinfacht?
Surfasb

Ich denke, dass Sie bei einer ähnlichen Anzahl von Knoten keinen besonderen Unterschied in der Speicherplatznutzung sehen würden, außer den linearen Kosten der Begrenzungsrahmen-Daten an Nicht-Blatt-Knoten. Aber Sie können Begrenzungsrahmen in der herkömmlichen Definition eines B-Baums einfach nicht effizient darstellen. Sie würden also sicherlich viel mehr Platz benötigen, wenn Sie versuchen würden, räumliche Informationen in einem B-Baum darzustellen. Der R-Baum ist für räumliche Beziehungen vorgesehen, der B-Baum unterstützt nur eindimensionale Ordnungen.
JasonTrue

2
@JasonTrue: Tatsächlich gibt es effiziente Möglichkeiten, Begrenzungsrahmen für die B-Tree-Indizierung zu linearisieren: en.wikipedia.org/wiki/Geohash . Obwohl Hashes "effizient" sind, sind sie nicht besonders praktisch. Bei einer beliebigen Begrenzungsrahmenabfrage werden wahrscheinlich 9 separate Abfragen für einen zweidimensionalen Raum benötigt. Wenn der Rahmen eine Hauptachse (z. B. The International Dateline) überlappt, kann sich die Anzahl der Abfragen verdoppeln oder vervierfachen, und die Verwendung wird sehr umständlich. Trotzdem ist es immer noch eine Option, wenn nur lineare Indizes verfügbar sind.
SingleNegationElimination
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.