it-swarm.com.de

Roter schwarzer Baum gegen B-Baum

Ich habe ein Projekt, in dem ich schnelle Such-, Einfüge- und Löschvorgänge für Daten im Bereich von Megabytes bis Terabytes durchführen muss. Ich hatte in letzter Zeit Datenstrukturen studiert und analysiert. Im Einzelnen möchte ich drei Fälle vorstellen und dazu Fragen stellen:

  1. Die Daten sind viel mehr als das, was der Speicher (Abtastbereiche in 10-15 Terabyte) auf einmal verarbeiten kann. In diesem Fall würde ich die Datenstruktur auf einer Platte speichern.

  2. Die Daten sind im Vergleich zum Speicher des Systems relativ wenig und können daher zur Schnelligkeit im Speicher selbst gespeichert und betrieben werden.

  3. Die Daten sind mehr als freier Speicher und gehen davon aus, dass sie weniger als die Größe eines möglicherweise zusammenhängenden Datenblocks in der Auslagerungsdatei sind. Daher speichere ich die Datenstruktur in einer Datei auf der Festplatte und mache eine Speicherzuordnung der Datei.

Meine Schlussfolgerungen sind:

Für den ersten Fall sollte ich einen B-Tree für einen schnelleren Zugriff verwenden, da durch die Rotation der Platte erzeugte Verzögerungen eingespart werden

Für Fall 2 sollte ich für einen schnelleren Zugriff einen roten schwarzen Baum verwenden, da sich Daten im Speicher befinden und nicht. von Elementen, die im schlimmsten Fall gescannt werden mussten, wäre weniger als eins, das ich tun muss, wenn ich B-Bäume verwende

Für den dritten Fall bin ich zweifelhaft, dass die Seitendatei auf der Festplatte native OS-E/A für die Verarbeitung von Dateien verwendet. Sollte B Tree eine bessere Option oder ein Red Black-Baum sein?

Ich möchte wissen, wo die drei oben genannten Schlussfolgerungen richtig sind und wo es schief geht und wie ich die Leistung in den drei einzelnen Fällen verbessern kann.

Ich verwende die C++ - Sprache mit einem roten, schwarzen Baum und einem B-Baum, die ich von Grund auf entworfen habe. Ich verwende die Boost-Bibliothek für die Dateizuordnung.

Update 1 :: Wurde durch this im Stackoverflow gelesen. Ich habe wirklich gute Einsichten bekommen, die mir das Gefühl geben, dass die Art der Vergleiche, die ich in den Fällen gemacht habe, fehlerhaft sein könnte. Ein Link wurde in der meistgesuchten Antwort http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html veröffentlicht.

34
swanar

Ein roter/schwarzer Baum entspricht mehr oder weniger einem 2-3-4-Baum, bei dem es sich lediglich um einen B-Baum handelt. Die Worst-Case-Leistung ist identisch, vorausgesetzt, Sie führen eine binäre Suche der B-Tree-Knotenwerte durch.

Der offensichtliche Nachteil eines B-Baums ist verschwendeter Speicherplatz. Abhängig von der verwendeten Sprach-/Speicherzuordnung können Sie jedoch feststellen, dass ein 2-3-4-Baum im Durchschnitt weniger Speicherplatz beansprucht als ein rot-schwarzer Baum. In 32-Bit-Java ist beispielsweise ein ca. 8-Byte-Overhead pro Objekt erforderlich. (Es hängt auch stark vom Allokator ab; IIRC phkmalloc fasst kleine Allokationen auf eine Potenz von 2 zusammen.)

Um Ihre Fälle zu beantworten,

  1. Die Datenträgerlatenz wird ungefähr gleichmäßig zwischen der Suchzeit und dem Warten auf das Drehen des Datenträgers aufgeteilt.
  2. Ein B-Baum sollte in der Lage sein, einen rot-schwarzen Baum zu übertreffen, wenn Sie es richtig machen (insbesondere sollte ein B-Baum schneller sein, wenn Knoten in eine Cacheline passen.)
  3. Es muss nicht in der Seitendatei zusammenhängend sein. es muss lediglich im virtuellen Adressraum des Prozesses zusammenhängend sein. Bei normalen Betriebssystemen ist es auch weitgehend identisch mit Fall 1, es sei denn, Ihre Daten sind so klein, dass sie meistens in den Arbeitsspeicher passen und der Speicheraufwand erheblich ist.

Der Einfachheit halber würde ich mich für einen B-Baum entscheiden und einige Benchmarks für verschiedene Knotengrößen durchführen.

10
tc.

Lesen Sie unten zwei Punkte, um den Unterschied zu verstehen:

1) Ein "Rot-Schwarz-Baum" ist ein "selbstausgleichender" "Binärer Suchbaum", , Wobei jeder Knoten mit einer Farbe (entweder Rot oder Schwarz) markiert ist und für die weitere Operationen definiert sind. Balance"

2) Alle "Rot-Schwarz-Bäume" sind "Binär-Suchbaum", aber alle "Binär-Suchbaum" sind nicht "Rot-Schwarz-Baum"

0
Muhammad Noman