Dipende dai casi, puoi anche avere prestazioni enormemente più veloci che con qualsiasi db.
Per ordine l'approccio più banale è quello di allocare un vettore in memoria, che contenga i tuoi dati, che poi andrai a scrivere/leggere in un solo colpo da disco.
qualcosa del genere (dipende dal linguaggio che usi)
"struttura record"
"cognome: stringa[40]
"nome: stringa[40]"
"indirizzo: stringa[100]"
vettore: array[1..1000] of "struttura record" (in alternativa puoi allocare dinamicamente il vettore, ridimensionarlo etc")
quantiRecord: intero (quanti ne usi effettivamente)
poi scriverai due procedure banali:
codice:
scriviFileSuTxt(i_nomefile,vettore);
apri i_nomefile in (sovra)scrittura
scrivi-quanti-record-sono-non-vuoti[*] vedi dopo a cosa serve
cicla per i su tutti gli elementi del vettore
scrivi su file vettore[i].cognome
scrivi su file vettore[i].nome
scrivi su file vettore[i].indirizzo
e qualcosa che fa il contrario
codice:
LeggiFileDaTxt(i_nomefile,vettore);
apri i_nomefile in lettura
leggi-quanti-record-da-caricare[*] serve qui
cicla per i su tutti gli elementi del vettoredacaricare
leggi da file vettore[i].cognome
leggi da file vettore[i].nome
leggi da file vettore[i].indirizzo
-----------
Se l'archivio è piccolo, e soprattutto non devi fare elaborazioni particolari, può andar bene (anche non tanto piccolo, visto che fino a 1.5GB riesci ad allocare facilmente dei vettori).
Un solo accorgimento: se si blocca il salvataggio perdi il tuo archivio.
E' quindi bene, nel caso, adottare una strategia più furba del tipo
Salvo-su-file-temporaneo-il-vettore-in-memoria
se arrivo-in-fondo-senza-problemi, cancello il "vecchio" file e rinomino quello nuovo