Basandosi su file hash per la sincronizzazione dei dati su dispositivi mobili e server

1

Immagina un'app client-server che consente all'utente di caricare immagini / documenti ecc. sul server e quindi consente agli utenti che hanno accesso, recuperarli e visualizzarli in un momento successivo rispettivi dispositivi mobili.

Quindi il flusso è qualcosa del genere:

  • Creatore (C) crea un messaggio con n numero di allegati.
  • C carica i file e il messaggio sul server tramite l'API REST.
  • I destinatari R1, R2 ... Rn ricevono notifiche sui nuovi contenuti
  • R1, R2 e altri entrano nei loro orari e recuperano il messaggio e gli allegati.
  • Una volta scaricato, l'app mobile non richiede il server la prossima volta che qualcuno dei destinatari tenta di visualizzare gli allegati, utilizza dati memorizzati nella cache locale.

Ora il creatore C ha già i file (da quando li ha creati) e non è necessario scaricarli nuovamente. Quindi quando riceve una risposta dal server come:

{
  messageId: 123,
  attachments : [ { id: a1, ...}, {id: a2, ...}, {id: a3, ...} ]
}

Tuttavia, non sa quale allegato è ciò che (cioè quale è a1 e quale è a2 e così via).

Semplicemente sa che il messaggio # 123 ha 3 allegati.

Quale sarebbe un buon modo per capirlo? Ci sono 2 approcci che mi vengono in mente:

Approccio 1: usa l'hash del file

  • Calcola l'hash del file (MD5 o SHA) e utilizzalo come chiave nell'app mobile.
  • Il server
  • fa lo stesso e restituisce l'hash come identificatore invece di un id generato.

Pro :

  • Non sono necessari metadati aggiuntivi per la sincronizzazione

Contro :

  • Probabilmente soggetto a errore - l'hash potrebbe non corrispondere a causa delle differenze di implementazione del sistema operativo o dell'hash
  • L'hashing sarà lento per i file di grandi dimensioni

Approccio n. 2: utilizza un tasto

  • L'app genera un UUID e lo invia al server come identificatore.
  • Il server lo memorizza e restituisce la chiave con la risposta per la sincronizzazione.

Pro

  • Gli errori relativi all'hash sono stati eliminati
  • La velocità di hash non è un problema dato che la generazione di UUID è abbastanza veloce e deterministica.

Contro

  • Viene trasmessa una chiave extra tra l'app / server che non ha altro scopo.

Quale di questi è preferibile? O forse c'è una terza opzione?

    
posta Mrchief 14.01.2016 - 23:52
fonte

0 risposte