Cancella i dati utente quando si disconnettono?

3

Sto scrivendo un'app e vorrei che gli utenti avessero la possibilità di accedere su più dispositivi e avere ancora i loro dati. La mia domanda è, quando l'utente si disconnette dal proprio account sul dispositivo X, dovrei cancellare l'intero database e ricaricare i dati dal server quando accedono al dispositivo Y? Questo è un problema per un paio di motivi.

  1. I dati vengono archiviati su client e server, in qualsiasi momento l'utente può eliminare i dati localmente, ma sarà comunque sul server (notificando il server ogni volta che eliminano un elemento sembra costoso, potrei essere sbagliato).

  2. È possibile che l'utente non disponga di una connessione Internet quando si disconnette, quindi non posso semplicemente iniziare una discussione per effettuare una sincronizzazione dell'ultimo minuto dello stato del database locale e sperare per il meglio.

posta BiGGZ 31.10.2016 - 02:31
fonte

2 risposte

2

Modifica perché in realtà non ho risposto alla domanda. Non penso che dovresti eliminare i dati dal sistema degli utenti quando si disconnettono.

Non conosco il tuo caso d'uso, quindi non posso dirlo con certezza. Ma suona come, quello che dovresti davvero fare, è pigro caricare i tuoi dati su richiesta e poi metterli nella cache localmente.

Dalla tua domanda, sembra che tu voglia caricare l'intero set di dati, indipendentemente dal fatto che l'utente ne abbia bisogno o meno.

Se si può caricare pigro (caricare ogni articolo solo quando l'utente lo richiede), è possibile creare un sistema di cache sul dispositivo che consenta un accesso frequente rapido.

Per quanto riguarda l'accesso offline, suggerisco caldamente che invece di affrontare situazioni in cui Z apporta modifiche dopo X, ma Z è online e X non lo è. Se stavo creando la tua applicazione, spingere strongmente per mettere l'applicazione in una modalità offline di sola lettura. Pertanto, se X non è in linea, può leggere l'archivio dati locale (o la cache) ma non può apportare modifiche o eliminare record finché non viene stabilita una connessione.

Questo ti risparmia un sacco di mal di testa e rende la tua implementazione molto più semplice.

Infine, per rilevare le modifiche tra il sistema locale e i dati nel database, ci sono due modi per andare. Mantenere un timestamp modificato sul server per ogni record. Se il record sul sistema è precedente, aggiornare l'elemento memorizzato nella cache. Altrimenti lascia. In alternativa è possibile eseguire l'hash dei dati e confrontarli per verificare le modifiche. Personalmente di solito vado solo al timestamp, in quanto la maggior parte degli oggetti già desidero una data creata e aggiornata.

Spero che questo aiuti.

    
risposta data 30.12.2016 - 22:33
fonte
2

Se esegui un delete / re-download, farai due cose: -

  • Sconvolgi gli utenti con piccoli piani dati.
  • Perderai i loro dati. Se apporto una modifica che non è sincronizzata, verrà persa al prossimo collegamento del sistema.

Quindi, è necessario implementare una sincronizzazione più intelligente.

Mi piacerebbe iniziare a trascinare le API di qualunque lingua / DB / Frameworks che usi e vedere se qualcuno lo ha già fatto.

In secondo luogo, vedrei se c'è un framework che potrei usare che vorrebbe abilitarlo.

In terzo luogo, e in ultima analisi, se non avessi trovato nulla, avrei implementato un campo "ultimo modificato" a livello di record come data / ora. Quindi, quando esegui la sincronizzazione, stai solo cercando di aggiornare i nuovi record (qual è il più recente cambiamento nella tabella A sul dispositivo mobile, qual è il più recente cambiamento nella tabella remota A. Differiscono? Se è così, devi implementare l'unione dei dati per assicurarsi che le ultime modifiche da entrambi i database siano aggiornate in entrambi i database.

Sospetto che scoprirai che esiste un meccanismo adatto incorporato o parte di un quadro generale. Ti farà risparmiare giorni.

    
risposta data 31.10.2016 - 07:30
fonte

Leggi altre domande sui tag