Random access auf Files



  • Ich habe verhältnismäßig große Dateien (von 50MB bis zu 2GB). Benutzer meines Programms interessiert der Inhalt aber nur an kleinen Ausschnitten - welche Ausschnitte ist unbekannt.

    Diese Dateien haben eine gewisse (baumartige) Struktur (stellt euch vielleicht vereinfacht XML vor). Zu Beginn lese ich jede Datei seriell und merke mir die Positionen an denen bestimmte "FileParts" beginnen, baue also in-memory einen kleinen Strukturbaum der großen Datei auf.

    Danach greifen Benutzer auf diesen Strukturbaum zu und wollen - in keiner bestimmten Reihenfolge - die tatsächlichen Inhalte mancher FileParts laden. Leider können das manchmal horizontale Ausschnitte sein (bspw. den Titel jedes "FileParts"), manchmal aber auch vertikale Schnitte (bspw. eben einen kompletten FilePart).

    Ist es für diese RandomAccess-Zugriffe sinnvoll die Dateien zu "memorymappen"? Falls ja, soll ich die mmap bereits zu Beginn (also beim seriellen Aufbau des Strukturbaums) anlegen oder erst danach? Falls nein, wie würdet ihr vorgehen?

    Den gesamten Inhalt der Dateien in den Speicher zu laden kommt jedenfalls explizit nicht in Frage, FileParts müssen also in irgendeiner Form "lazy" geladen werden - außerdem soll es auch möglich sein diese Parts wieder zu "entladen" - ob das entladen nun explizit oder implizit passiert ist hingegen egal.

    MfG SideWinder



  • Ja, ich würde erstmal das ganze per Memory Mapping machen. Das ist das universelle Tool das sicher eine gute Wahl ist.

    Ist es möglich die Struktur in der Datei in einer anderen, kleineren Datei zu halten? Das würde dir sehr viel Zeit sparen, da du die 2GB Datei nicht parsen musst nur um das Inhaltsverzeichnis zu erstellen.


Log in to reply