Container zum schnellen Lesen / Schreiben
Verfasst: Sa Mai 17, 2014 9:20 pm
Ich habe folgende Problemstellung:
Ich benötige ein Containerformat (existierend oder selbstgebaut), um z. B. 100.000 "kleine" (10 - 30 KB) jpeg-Bilder in diesem Container (z. B. zip) zu speichern und sehr schnell zu lesen (das Ganze läuft dann auf einem Server und schickt diese kleinen Bilder an die Clients). Je schneller das Lesen aus dem Container funktioniert, desto besser das User-Erlebnis.
Meine Fragen:
Das ZIP Format (ohne Kompression) scheint eigentlich ganz geeignet, da es die Dateien seriell in den ZIP-Container schreibt und am Ende der ZIP-Datei ein Verzeichnis der Dateien erstellt. In diesem Verzeichnis stehen auch die "Offsets" und Längen der einzelnen im Archiv gespeicherten Dateien. Das heißt, man muss nicht das ganze Archiv von vorne nach hinten durchlesen, um nur eine einzelne Datei zu extrahieren. Das ist wichtig, um sehr schnell die Dateien einzeln lesen zu können.
Meine Fragen:
1. Das Verzeichnis aller im ZIP gespeicherten Dateien liegt am Ende der ZIP-Datei. Daher wird dieses Verzeichnis "rückwärts" aus dem ZIP-Archiv als erstes gelesen. Festplatten unterstützen ja aber nativ kein "Rückwärtslesen". Würde es womöglich einen Geschwindigkeitsvorteil bringen, das Verzeichnis der ZIP Datei daher in einer eigenen externen Datei auf der Festplatte abzulegen, um noch schneller lesen zu können?
2. Gibt es bei Dateioperationen einen Geschwindigkeitsunterschied zwischen C oder C++?
3. Wenn ich ein eigenes Containerformat bauen sollte und meine eigenen Read/Write Funktionen schreibe, ist es dann hinsichtlich der Geschwindigkeit egal, ob ich byte-weise lese oder immer größere Teile (mit anderen Worten, wird durch C/C++ oder das System ohnehin performant gepuffert oder muss ich darauf achten)?
Vielen Dank im Voraus!
Ich benötige ein Containerformat (existierend oder selbstgebaut), um z. B. 100.000 "kleine" (10 - 30 KB) jpeg-Bilder in diesem Container (z. B. zip) zu speichern und sehr schnell zu lesen (das Ganze läuft dann auf einem Server und schickt diese kleinen Bilder an die Clients). Je schneller das Lesen aus dem Container funktioniert, desto besser das User-Erlebnis.
Meine Fragen:
Das ZIP Format (ohne Kompression) scheint eigentlich ganz geeignet, da es die Dateien seriell in den ZIP-Container schreibt und am Ende der ZIP-Datei ein Verzeichnis der Dateien erstellt. In diesem Verzeichnis stehen auch die "Offsets" und Längen der einzelnen im Archiv gespeicherten Dateien. Das heißt, man muss nicht das ganze Archiv von vorne nach hinten durchlesen, um nur eine einzelne Datei zu extrahieren. Das ist wichtig, um sehr schnell die Dateien einzeln lesen zu können.
Meine Fragen:
1. Das Verzeichnis aller im ZIP gespeicherten Dateien liegt am Ende der ZIP-Datei. Daher wird dieses Verzeichnis "rückwärts" aus dem ZIP-Archiv als erstes gelesen. Festplatten unterstützen ja aber nativ kein "Rückwärtslesen". Würde es womöglich einen Geschwindigkeitsvorteil bringen, das Verzeichnis der ZIP Datei daher in einer eigenen externen Datei auf der Festplatte abzulegen, um noch schneller lesen zu können?
2. Gibt es bei Dateioperationen einen Geschwindigkeitsunterschied zwischen C oder C++?
3. Wenn ich ein eigenes Containerformat bauen sollte und meine eigenen Read/Write Funktionen schreibe, ist es dann hinsichtlich der Geschwindigkeit egal, ob ich byte-weise lese oder immer größere Teile (mit anderen Worten, wird durch C/C++ oder das System ohnehin performant gepuffert oder muss ich darauf achten)?
Vielen Dank im Voraus!