Coerenza per la scrittura su disco in un grafico di un oggetto modello

1

Stai scrivendo un'app in cui il modello (come in MVC) è un oggetto grafico. Occasionalmente, vuoi salvare questo oggetto grafico su disco. Quali sono le migliori pratiche per garantire che la scrittura sia coerente? (Ovvero, come si impedisce che il grafico dell'oggetto si muti nel mezzo di una serializzazione / scrittura?)

Nella mia app, ogni volta che viene attivata una scrittura, eseguo una rapida copia in memoria del mio oggetto grafico (bloccando il thread del modello nel frattempo), serializzo quella copia in un thread in background e poi la scrivo. Ma questa non sembra una soluzione molto elegante, soprattutto se il modello è abbastanza grande. Non voglio bloccare la mia interfaccia utente mentre sta accadendo la copia.

Posso immaginare di bloccare il grafico degli oggetti per impedire la mutazione nel mezzo di una scrittura su disco, ma ciò richiederebbe la perdita di input dell'utente o la manutenzione di una coda di operazioni in sospeso per la durata della scrittura.

Posso anche immaginare di versionare il modello e di incrementare il numero di versione con ogni mutazione, ma ciò richiederebbe anche la persistenza della versione del grafico che viene scritta. Se non vogliamo eseguire una copia completa durante la scrittura, dovremmo attivare una copia ogni volta che un oggetto modello viene mutato durante una scrittura. Sembra che potrebbe diventare abbastanza complesso.

Dove posso leggere di più sulle strategie utilizzate per affrontare questo problema? Quale approccio è generalmente utilizzato per gestire questo problema?

    
posta Archagon 24.07.2016 - 10:29
fonte

1 risposta

2

Potresti rendere il tuo oggetto grafico immutabile e gli aggiornamenti del modello come operazioni su una struttura dati immutabile.

In generale, se vuoi creare una nuova versione di una struttura dati immutabile non è necessario copiare l'intera struttura dati, ma solo le parti che sono mutate. Quindi puoi scrivere su disco la versione immutabile corrente del grafico dell'oggetto mentre un altro thread crea una nuova versione del grafico dell'oggetto, che condivide la parte invariata con il vecchio grafico.

Potresti trovare idee utili in Strutture dati puramente funzionali

    
risposta data 24.07.2016 - 11:12
fonte

Leggi altre domande sui tag