Il modo migliore per mantenere dati coerenti nel modello su tutti i dispositivi?

1

Ho un modello per un'app che è abbastanza grande, che deve essere tutto sul dispositivo degli utenti allo stesso tempo. Ad esempio, un foglio di calcolo. Se un utente apporta una modifica al modello su un dispositivo, voglio che questa modifica si propaghi a tutti gli altri utenti, aggiornando un server centralizzato.

Non sono del tutto sicuro del modo migliore per raggiungere questo obiettivo. Ho un paio di idee:

  1. Ogni modifica del modello comporta la notifica al server della modifica, dove aggiorna il suo database e l'evento di modifica viene emesso tramite un socket su tutti i dispositivi collegati. Ogni dispositivo quindi aggiorna il suo modello quando riceve il messaggio dal server.

La mia preoccupazione con questa opzione è che se qualcosa va storto sul server e l'evento non viene emesso, perdiamo consistenza.

  1. Ogni modifica del modello comporta la notifica al server della modifica, dove viene aggiornato il suo database. Quindi dice a tutti i dispositivi di cui avranno bisogno per aggiornare il loro modello. I dispositivi estraggono quindi una nuova copia dell'intero modello dal server.

Qui potrebbero esserci problemi di prestazioni associati al download ripetuto di grandi quantità di dati sui dispositivi.

Mi chiedo quale approccio per affrontare questo problema potrebbe essere?

    
posta Tom 20.01.2015 - 11:45
fonte

1 risposta

1

Quello che suggerisci è il solito modo per raggiungere questo obiettivo - l'alternativa è quella di comunicare direttamente con gli altri dispositivi in una topologia peer-to-peer, ma che si interrompe rapidamente man mano che i dispositivi vengono aggiunti.

Quindi il tuo requisito è controllare e rilevare gli errori. Potresti implementare un heartbeat sul server in modo che tu sappia che è vivo e / o puoi aggiungere un numero di versione che viene incrementato ogni volta che un dispositivo invia un aggiornamento, quindi altri dispositivi possono dire se un aggiornamento è in ritardo o se hanno perso un aggiornamento o due (e quindi obbliga l'utente a risincronizzare)

Dovresti inviare solo le modifiche richieste dal server ai dispositivi, nello stesso modo in cui ogni dispositivo invia una modifica delta al server. Con i documenti di grandi dimensioni è probabile che il tempo di propagazione sia proibitivo - un dispositivo potrebbe non essere in grado di tenere il passo con la velocità dei cambiamenti che vengono inviati in altro modo (si pensi a un gioco in cui le posizioni dei giocatori vengono inviate come pacchetti di cambiamento, non all'intero mondo di gioco scaricato ogni fotogramma)

    
risposta data 20.01.2015 - 11:59
fonte

Leggi altre domande sui tag