Sincronizzazione dei dati principali (eliminazione) utilizzando un servizio Web REST personalizzato

4

Devo sincronizzare il mio stack di dati core locale con un server che esegue un'archiviazione persistente dei dati sotto le copertine. (Ho seguito altri post qui e su SO su argomenti simili)

I miei requisiti:

  1. Sincronizzazione unidirezionale. Significa che il mio server è sempre aggiornato ei miei clienti hanno solo bisogno di essere alimentati con delta incrementali che alimentano nel loro stack di dati di base.

  2. Il server potrebbe inserire arbitrariamente nuovi record, modificare quelli esistenti o addirittura eliminarli.

Preferisco non usare RestKit perché posso fare il lavoro di fare interrogazioni e aggiornare io stesso lo stato locale. Non ho bisogno di una libreria extra per farlo.

La mia soluzione:

Tengo localmente una data aggiornata (UTC). Invio periodicamente questa data al mio server e il mio server risponde con i dati che devo aggiornare o inserire, in base alla data / ora del server per ciascun record.

Il mio problema:

Non so come gestire le eliminazioni.

Come gestirò le eliminazioni in uno scenario del genere? Se cancello il record dal server, come faranno i client a cancellare anche quel record.

Pensieri? Posso pensare a un numero di modi complicati per farlo (ad esempio non eliminare il record o tenere traccia separata dei record cancellati, ecc.), Ma sto cercando il più semplice.

    
posta AbuZubair 21.01.2013 - 08:23
fonte

2 risposte

1

La tua soluzione è buona ma, come hai trovato, devi tenere il record cancellato da qualche parte per informare i clienti.

Un'altra soluzione è richiedere che i client "registri" sul tuo server. Quindi mantieni una coda di tutte le modifiche per client sul server. Consuma più spazio sul lato server, ma può tenere traccia di tutte le modifiche e non solo dell'ultimo stato di un record.     
risposta data 22.01.2013 - 21:15
fonte
0

Anche se 20c e Ant hanno entrambi proposto soluzioni ragionevoli, non volevo davvero mantenere nessuno stato extra come un flag cancellato o dati per client. Diventa troppo complicato per i miei gusti.

La soluzione che ho intenzione di implementare per la cancellazione sarà semplicemente la seguente:

  1. Il client emette una richiesta di cancellazione. Questa richiesta può essere effettuata solo dopo l'aggiornamento / gli inserimenti sono aggiornati.
  2. Il server risponde con la chiave primaria (un intero di 4 byte) di ogni singolo record. Questa risposta è anche compressa per risparmiare spazio. Per riferimento, la quantità di chiavi primarie compresso di 40k records è di circa 20k byte.
  3. Il client quindi fa un riferimento incrociato e cancella i record che hanno chiavi primarie che il server non ha incluso.

Volevo solo lanciarlo. C'è anche una soluzione valida.

    
risposta data 22.01.2013 - 23:32
fonte

Leggi altre domande sui tag