Ich würde davon abraten, eine einzige Flatfile für theoretisch unendliche Datenmengen zu verwenden.
Wenn Sie über eine theoretisch unendliche Datenmenge verfügen, benötigen Sie einen Direktzugriff , dh mehrere Dateien oder eine Datenbank, oder ein indiziertes Flatfile-Format, bei dem die bereits von Dateisystemen oder einer Datenbank gelösten Indexierungsprobleme erneut gelöst werden.
Wenn Sie Ihre Chunks auf mehrere Dateien verteilen, müssen Sie nur "% APPDATA% / game / map / -110 / 5000.dat" (oder einen anderen Dateinamen, wenn Sie möchten) erhalten, um den Chunk auf (-110, 5000) zu bringen beginnen sie zu komprimieren). Datenbanken benötigen nur eine Abfrage. Wenn ein Block keine Daten enthält, können Sie einfach nichts speichern. Eine einzelne flache Datei bietet nicht die Geschwindigkeit und den Komfort eines Direktzugriffs auf Anhieb.
In einer einzelnen Datei beliebiger Größe müssen Sie für einen schnellen Direktzugriff eine Garantie für die Position eines Datenblocks haben, was die Verwendung eines Index bedeutet (da eine rohe binäre Suche in Ihren Datenblöcken die Leistung beeinträchtigt und ein Raster in Ihrem erstellt Datei mit "leeren" Stellen gibt Ihnen das Problem von Byte56 ). Sobald Sie ein Indizierungssystem entwickelt, es effizienter gestaltet und sich eine API geschrieben haben, haben Sie so etwas wie das Dateisystem oder eine Datenbank neu erstellt. Wenn Sie dadurch nicht tatsächlich etwas gewinnen, ist es die Investition wahrscheinlich nicht wert. Zum Beispiel profitiert Steam massiv von ihren GCF / NCF-Dateiformaten.
Wenn Sie Sicherheit für Ihre Speicherungen wünschen, ist dies weiterhin möglich. Sie können beispielsweise jeden einzelnen Block verschlüsseln. Um zu verhindern, dass sie gelöscht werden, können Sie einen zentralen Hash basierend auf vorhandenen gespeicherten Daten verwenden. Wenn die gespeicherten Daten nicht mit dem Hash übereinstimmen (und Ihr Programm die Änderung nicht verursacht hat), wurde ein Block gelöscht.