Riduzione al minimo dei dati inviati tramite una chiamata webservice su una connessione costosa

1

Sto lavorando su un sistema che ha molti laptop remoti tutti collegati a Internet tramite connessioni dati cellulari.

L'applicazione si sincronizzerà periodicamente con un database centrale. Il problema è che, a causa di fattori al di fuori del nostro controllo, il costo per spostare i dati attraverso le reti cellulari è estremamente costoso.

Attualmente stiamo inviando un file XML compresso attraverso il cavo in cui viene elaborato e varie operazioni vengono eseguite (principalmente inserendolo in un database).

Il mio primo paio di pensieri è stato convertire quel documento XML in json, appena prima della trasmissione e convertirlo nuovamente in XML subito dopo aver ricevuto dall'altra parte, e ottenere una compressione extra gratuitamente senza cambiare molto. Un altro pensiero era di testare vari altri algoritmi di compressione per determinare il più piccolo possibile. Anche se, non sono del tutto sicuro di quanta differenza avrebbe fatto json vs xml una volta compressa.

Ho pensato che dovevano essere disponibili risorse che affrontano questo problema da una prospettiva di teoria dell'informazione. Qualcuno sa di tali risorse o suggerimenti su quale direzione andare. Questo si è sviluppato sullo stack MS .net su Windows come riferimento.

    
posta aceinthehole 27.06.2013 - 20:53
fonte

1 risposta

3

La compressione migliore ottenuta dall'uscita delle informazioni, perché le informazioni che non vengono trasmesse si riducono a 0 byte.

Come primo passo, tieni un registro di quando sono state cambiate le ultime cose e quando l'applicazione è stata sincronizzata con il database. Quindi hai il tuo primo salvataggio in tutti quei record che non sono cambiati dall'ultima sincronizzazione.

Un secondo passaggio per ridurre la quantità di dati trasmessi consiste nell'inviare solo le differenze durante la sincronizzazione, ma ciò richiederà una memoria aggiuntiva per conservare una cronologia di come sono cambiate le cose.

Dopo aver ridotto al minimo la quantità di informazioni che devono essere trasmesse, puoi iniziare a pensare alla compressione con gzip, bzip2 o qualche algoritmo simile.

Come metodo completamente indipendente per mantenere bassi i costi delle sincronizzazioni, aggiungi un'opzione all'applicazione per attivare manualmente una sincronizzazione e incoraggia gli utenti a utilizzare tale opzione quando hanno il dispositivo connesso a una rete economica.

    
risposta data 27.06.2013 - 21:32
fonte

Leggi altre domande sui tag