Tendo ad essere d'accordo con risposta di Doc Brown : farai meglio utilizzare un database . Potrebbe essere sqlite o un vero server di database: mongodb o postgresql , ecc .... Potresti forse usare un file indicizzato come GDBM (anziché un database) in alcune circostanze limitate. Se i dati sono piccoli (che a quanto pare non lo sono) potresti considerare di persistere in alcuni formati testuali come JSON (che potresti usare anche all'interno delle tabelle del database).
Dovresti anche definire se la struttura dei dati è un albero reale (senza sottonodi condivisi) o se è un grafico. Potrebbe essere necessario gestire il set di elementi già scaricati e gestire i dati condivisi. Puntatori condivisi e puntatori intelligenti possono essere molto importanti.
È possibile memorizzare, in ogni oggetto significativo in memoria, qualche identificatore del database (o numero identificativo) e forse altre metainformazioni relative al salvataggio dei dati (salvataggio di data / ora, cambio orario, ecc ...)
Gli algoritmi BTW, copying Garbage Collection possono essere rilevanti (dal momento che persistere in alcuni database è abbastanza simile a un GC di copia) . Leggi anche il manuale GC .
Potresti essere interessato a persistenza e checkpoint delle applicazioni .
Dovresti progettare il meccanismo di persistenza abbastanza presto se possibile.