Vorrei sconsigliare l'utilizzo di un singolo file flat per quantità teoricamente infinite di dati.
Se si dispone di una quantità teoricamente infinita di dati, è necessario un accesso casuale , ovvero più file o un database, oppure un formato di file flat indicizzato, che implica la risoluzione dei problemi di indicizzazione già risolti dai file system o da un database.
Se distribuisci i tuoi blocchi su più file, ottenere il blocco in (-110, 5000) è solo una questione di dire "% APPDATA% / game / map / -110 / 5000.dat" (o qualche altro nome file se vuoi iniziare a comprimerli). I database hanno solo bisogno di una query. Se un blocco non ha dati, non puoi semplicemente archiviare nulla. Un singolo file flat non offre la velocità e la praticità dell'accesso casuale fin dall'inizio.
In un singolo file di dimensioni arbitrarie, per un accesso casuale rapido devi avere una garanzia per la posizione di qualsiasi blocco di dati, il che significa utilizzare un indice (poiché una ricerca binaria non elaborata attraverso i tuoi blocchi di dati danneggia le prestazioni e la creazione di una griglia nel tuo file con punti "vuoti" ti dà il problema di Byte56 ). Una volta sviluppato un sistema di indicizzazione, assicurandogli efficienza e scrivendo un'API, hai ricreato qualcosa come il file system o un database. A meno che non si ottenga effettivamente qualcosa dal farlo, probabilmente non vale l'investimento. Ad esempio, Steam beneficia enormemente dei loro formati di file GCF / NCF.
Se vuoi un po 'di sicurezza sui tuoi salvataggi, è ancora possibile farlo. Ad esempio, puoi crittografare ogni singolo blocco. Per evitare che vengano cancellati, potresti avere un hash centrale basato sui dati salvati esistenti. Se i dati salvati non corrispondono all'hash (e il tuo programma non ha causato la modifica), un blocco è stato eliminato.