Ich weiß, es gibt Bulk-Laden in b + Baum. Ich wollte nur wissen, gibt es einen Algorithmus für das Massenladen in B-Tree. Zum Beispiel angesichts einer Reihe von Daten, was ist der beste Weg, um einen B-Baum zu erstellen?Gibt es einen Algorithmus zum Massenladen in B-Tree?
Antwort
Eigentlich Die Antwort ist ja.
Der Hauptunterschied zwischen B + -Bäumen und einfachen B-Bäumen besteht darin, dass die Werte tatsächlich in den Blättern für Erstere gespeichert werden, während im späteren Fall Werte in jedem Knoten gefunden werden. Mit B + -Bäumen können Sie also Daten nahezu kontinuierlich speichern, wobei jedes Blatt ein zusammenhängendes Stück der gesamten sortierten Daten enthält. Dies kann nicht für B-Bäume gelten: Ein innerer Knoten enthält mehrere Elemente, die jedoch nicht zusammenhängend sind. der ganze sortierte Datensatz.
Diese Eigenschaft ist für das Massenladen von Bedeutung: Dieser Prozess funktioniert bei einem bereits sortierten Datensatz, indem er in die Arrays geschnitten wird, die die Blätter des B + -Baums bilden. So sieht es für einen B-Baum aus, dass es nicht funktionieren kann.
Wenn wir die Daten auf eine Weise sortieren können, die innere Knotenelemente zusammenfasst, dann ist das Problem gelöst. Um dies zu tun, muss man im Voraus wissen, wie die Elemente gruppiert werden. Dies stellt sich als möglich heraus.
Lassen Sie uns o
(Reihenfolge) die minimale Anzahl der untergeordneten Elemente in einem Knoten (die mit der ursprünglichen Definition einer B-Baum-Reihenfolge übereinstimmt) aufrufen. Wir betrachten den Wurzelknoten als auf der höchsten Stufe des Baumes und die Blätter als am niedrigsten (Stufe 0). Für einen gut ausbalancierten Baum werden alle Blätter tatsächlich auf der gleichen Stufe sein.
Die Stufe k der Baumgruppen Elemente, die um mindestens o
Elemente in der Stufe k-1 beabstandet sind. Nach einer anfänglichen Sortierung müssen wir Elemente aus dem sortierten Array, das die Stufe 0 darstellt, extrahieren und sie in einem anderen Array gruppieren, um Stufe 1 zu erstellen, und dann das Array mit dieser Anordnung erneut in ein neues Array für Stufe 2 einfügen und den Vorgang wiederholen bis es weniger als o
Elemente im neuesten Array gibt, das die Root-Stufe sein wird. Von nun an ist es möglich, den Baum direkt aus dem Bühnenbild aufzubauen:
- Split jede Stufe in Arrays von
o
Elementen, - build Indexarrays Knoten zu verknüpfen
- build jeden Knoten als Subknoten das Paar des entsprechenden Indexarrays * Wertarray
Der resultierende Baum muss nicht unbedingt gut ausbalanciert sein. Dies hängt von der Anzahl der Einträge im Dataset und o
ab. Es sollte möglich sein, das Intervall, das beim Erstellen der Stufen verwendet wird, abzustimmen, um einen besseren verteilten Baum zu erhalten.
Alles in allem ist die Arbeit, die benötigt wird, um einen B-Baum in großen Mengen zu laden, mühsamer als für B + -Baum, aber es ist möglich.
- 1. Gibt es einen Mittelpunkt-Ellipsen-Algorithmus?
- 2. Gibt es einen "binären Sortier" -Algorithmus?
- 3. Paginieren Sie so oder gibt es einen besseren Algorithmus?
- 4. Gibt es einen besten .NET-Algorithmus für die Kreditkartenverschlüsselung?
- 5. Gibt es einen Algorithmus für die Zerlegung von Zahlen?
- 6. Gibt es einen Git Haken zum Ziehen?
- 7. Gibt es einen Algorithmus benötigt funktionale Sprache ausschließlich umgesetzt werden
- 8. Gibt es einen Unterschied zwischen AES_128_CBC und AES_128_CBC_SHA Algorithmus?
- 9. Gibt es einen Algorithmus, um ein Abhängigkeitsdiagramm zu "vereinfachen"?
- 10. Gibt es einen O (nlog (n)) - Algorithmus zum Invertieren einer einfach verknüpften Liste?
- 11. Gibt es einen Algorithmus zum Sortieren von String-Arrays für GPU?
- 12. Gibt es einen Algorithmus zum Zuordnen einer Liste von Zahlen zu einigen, die weniger variieren?
- 13. Gibt es einen super schnellen Algorithmus zum Suchen von Linien auf Bild?
- 14. Warum gibt es keinen std :: copy_if Algorithmus?
- 15. was die @param in Elasticsearch Massenladen ist
- 16. Gibt es in Eclipse einen Hotkey zum "Deklarierten Typ öffnen"?
- 17. Gibt es einen guten Algorithmus für die Überprüfung auf Änderungen in Daten über einen bestimmten Zeitraum?
- 18. MySQL Fehler mit BTREE
- 19. Gibt es einen Algorithmus zum Generieren von fortlaufenden Nummern basierend auf der letzten Nummer in der Datenbank?
- 20. Gibt es einen Befehl zum Löschen des Logcat?
- 21. Gibt es einen Content-Header-Typ zum Hinzufügen von HttpResponseHeader?
- 22. Gibt es einen Identitätskanal?
- 23. Gibt es einen tatsächlichen GMSPlace-Attributionstext zum Testen?
- 24. Gibt es einen Funktionstyp in C#?
- 25. Gibt es einen Grund zum "Speichern" von Variablen?
- 26. Gibt es einen Algorithmus zur Umwandlung von Quaternion-Rotationen in Euler-Winkel-Rotationen?
- 27. Gibt es einen Parallelfund in Haskell?
- 28. Gibt es einen beschreibbaren Iterator in Java?
- 29. Gibt es einen Online-Beispielfilm zum Testen von MPMoviePlayerController?
- 30. Xamarin.Forms - Gibt es einen Mechanismus zum "Einbinden" einer Teilansicht?