Frage

Ich war in Bezug auf die Praktikabilität fragen, der eine im Speicher Baumstruktur als Verzeichnisbaum für die Persistenz Zwecke zu speichern. In meinem Fall zielt er Dateisystem ZFS sein wird, und sobald die Struktur erstellt wurde, wird sie selten von mehreren Prozessen zugegriffen werden.

Wie performant ist ein Verzeichnisbaum als Mechanismus der Persistenz für Datenbaum benutzt?

War es hilfreich?

Lösung

Um Ihren Baum zu lesen und zu schreiben, müssen Sie das Dateisystem mehrmals pro Knoten anrufen. Das ist viel teurer als jeder vernünftiger Code Sie ein Speicherabbild gehen konnten entwickeln.

Ob es ein vernünftiger Ansatz ist, hängt von Ihrem Nutzungsmuster erwartet wird, zu sein. Wenn in einem typischen Aufruf des Codes Sie in der gesamten Baumstruktur lesen erwarten, arbeitet daran, es dann in voller schreiben - Sie sind besser dran, es Rangierung in eine einzige Datei auf. Wenn jedoch erwarten, dass Sie / Arbeit lesen auf / mutieren nur wenige Knoten, ohne in den meisten der Baum zu lesen, der Unterschied in der Leistung zwischen der Verzeichnisstruktur zu Fuß und mehrere tun sucht / liest zu durchqueren ein Baum in einer einzigen Datei gespeichert wird viel kleiner, und es kann die frühere tun für Einfachheit / Klarheit / Vermeidung neu zu erfinden Räder wert geworden. Außerdem, wenn mehrere Prozesse dies gleichzeitig tun, Sperren Knoten und Teilbäume werden viel einfacher mit dem Verzeichnis-basierten Ansatz.

Beachten Sie, dass für einige häufig verwendete Dateisysteme die Zeit, um einen Verzeichniseintrag zu öffnen auf die Gesamtzahl der Einträge in dem Verzeichnis ab.

EDIT: Ich habe für eine Website CGI-Backend mit ext3 ähnliche Dinge getan; das Rad nicht aus neu zu erfinden Prototyping schneller und Wartung einfacher, Reads / Writes / ziemlich gut skaliert sichernd, und sehr häufige Änderungen - in der Größenordnung von Hunderten pro Sekunde - in die Verzeichnisstruktur arbeitete sich schlecht auf realen Speicher ; am Ende umstrukturiert ich die Dinge so, dass die Abschnitte der Verzeichnisstruktur die Verzeichniseinträge, sehr häufig hinzugefügt werden würden / entfernt auf einem tmpfs Volumen am Ende - für mich, diesen Satz von Staat könnte (teuer) aus, dass in weniger flüchtigen Speichern gespeichert rekonstruiert werden nach einem Neustart. Ich habe wenig Erfahrung von ZFS, und weiß nicht, Ihre beabsichtigten Verwendungsmuster, so weiß nicht, ob dies ein Problem für Sie sein würde. Wäre ich für eine sehr stark frequentierte Website tue dies jetzt, hätte ich wahrscheinlich stattdessen meine eigene benannte Schloss Bibliothek rollen.

Andere Tipps

Die meisten Dateisysteme sind für den Zugriff auf eine geöffnete Datei optimiert, so zum Öffnen / Schließen einer Datei nimmt eine bedeutende Zeit. Wenn jedes Blatt des Baumes klein ist, das Lesen / Schreiben die gesamte Struktur würde ein Vielfaches länger als nötig dauern.

Auch die meisten Dateisysteme haben einen minimalen Zuweisungsblock, in der Regel um 2-8KB. wenn Ihre Blätter viel kleiner als die sind, werden Sie viel Platz verschwenden.

Kurz gesagt, je kleiner Blätter, desto schlechter ist die Idee.

Wenn ich es richtig verstehe, du redest eine Baumstruktur aufzubauen, die eine in-Code-Darstellung des Dateisystems geben würde, so dass ich vermute, dass Sie Overhead beim Start entstehen werden, wo Sie in Ihrer Baumstruktur lesen, aber nachfolgende Lookups und Querungen des Baumes wahrscheinlich schneller sein würde als schlagen Plattenspeicher jedes Mal.

Mögliche Probleme:

  • Es kann eine ineffiziente Nutzung von Speicherplatz machen (in vielen Dateisystemen ein Verzeichnis eine Datei ist und als solches einen ganzen Block auf der Festplatte belegt ...)
  • Es wird langsam lesen / schreiben, weil Sie viele Dateisystemzugriffe
  • machen
  • Das Dateisystem kann / wird Grenzen für die Länge der einzelnen Elemente Name verhängen und / oder Zeichen, die Sie für Namen verwenden können,
  • Es wird für andere Prozesse zu verderben Ihre Daten und / oder erfordern einen erheblichen Verriegelungs Kosten
  • einfach sein
  • Bei der Verwendung von Solid-State-Disks `` ‚‘ dies in mehr schreibt als andere Methoden führen kann und die Lebensdauer der Medien verkürzen

Fazit: es kann nicht sein, es wert

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top