|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
Sincronizzazione dati tra memoria e disco
Supponiamo di avere un semplice programma (tipo un'agenda), mono utente, che funzioni solo in locale leggendo e scrivendo da un file XML. Quando l'utente aggiunge, modifica o rimuove dei dati (tipo un evento o un appuntamento), come propagare la modifica delle strutture dati dalla memoria al disco?
Finora ho sempre caricato il file all'avvio dell'applicazione, per poi sovrascriverlo completamente alla sua chiusura (o in caso di salvataggio esplicito dell'utente), ma vorrei tentare un approccio un po' più intelligente. Potrei decidere di mantenere sincronizzati i dati ad ogni modifica, ma non sono sicuro su come implementare la cosa: dovrei comunque rigenerare e sovrascrivere il file XML, anche in caso di minima modifica. Voi come fareste? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
ti chiederemmo in che linguaggio e di che programma stai parlando....
più sei generico, minore è il numero di aiuti possibili |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
In linea generale, la logica applicativa dovrebbe essere slegata dalla rappresentazione fisica dei dati. Creando tale astrazione, sul layer persistenza puoi trasparentemente operare tutte le ottimizzazioni che vuoi, senza che il livello applicazione ne sia consapevole.
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
@lupoxxx87:
A dire il vero speravo proprio in una risposta che non dipendesse dal linguaggio, in ogni caso uso le librerie Qt, a volte in C++ a volte in Python. L'applicazione che sto sviluppando è un po' complessa, ma il problema è identico nel caso di una semplice agenda: ho in memoria una lista di appuntamenti (istanze della classe Appuntamento), quando l'utente ne aggiunge/modifica uno io aggiorno la lista. In questo modo l'applicazione è coerente, le modifiche si manifestano immediatamente; ma i dati salvati su disco no, quelli vengono salvati alla chiusura. Però in caso di crash o altri problemi perdo tutto quello che avevo modificato. @nomeUtente86: Dovrei avere un componente che si occupa di caricare i dati da disco e fornirli poi all'applicazione ogni volta che ne abbia bisogno (e aggiornarli quando l'applicazione vuole modificarli)? Hai qualche esempio (anche link ovviamente)? |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Un database locale?
Magari un database che si basa su un datafile unico, poer semplicita' dell'applicazione.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
forse la cosa migliore è modificare, o sovrascrivere, il metodo add relativo alla tua lista e fare in modo che ogni volta che un elemento viene aggiunto, il relativo file viene salvato...
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Poi se sia effettivamente conveniente interfacciarsi ad ogni richiesta/modifica con il disco, va valutato dal comportamento medio dell' applicazione e dal rischio derivante dalla perdita, imprevista, di dati. |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Se siamo nell'ambito di un linguaggio orientato agli oggetti e parliamo di piccole moli di dati potrebbe essere interessante valutare il "Prevalent System" architecture pattern, in breve i dati sono tenuti in memoria, mentre uno snapshot periodico degli stessi assieme alle successive modifiche/transazioni vengono scritte su disco per poter essere recuperate ed eseguite al successivo riavvio (il che ti risolverebbe sia il problema dello scongiurare perdite di dati dovuti a crash inattesi del sistema, sia il tenere sempre i dati sincronizzati).
Conosco una libreria, Prevayler, che implementa per Java questa strategia, e ne spiega un po' la filosofia. Cerca ["Prevalent System" architecture pattern] su Google, se sei interessato.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
Ok, grazie per le risposte. Proverò queste strade.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:48.