Ho esaminato questa domanda e questa domanda , ma non sembrano affrontare i sintomi che sto vedendo.
Ho un file di registro di grandi dimensioni (circa 600 MB) che sto cercando di trasferire attraverso una rete cellulare. Poiché si tratta di un file di log è appena aggiunto al (anche se in realtà in un database SQLite con solo INSERT corso di esecuzione, quindi non è del tutto così semplice, ma con l'eccezione dell'ultima 4k pagina (o forse un pochi) il file è identico ogni volta. È importante che vengano effettivamente inviati solo i cambiamenti (e qualunque somma di controllo), perché la connessione dati è misurata.
Tuttavia, quando eseguo un test attraverso una connessione illimitata (ad es. Hotspot wifi gratuito) non vedo un rapporto accelerato o ridotto di dati osservato o segnalato. Tramite una connessione WiFi lenta vedo nell'ordine di 1 MB / s o meno, segnalando che il trasferimento richiederà circa 20 minuti. Su una connessione WiFi veloce vedo una velocità uniforme più veloce, ma nessun rapporto di speedup e un secondo tentativo di trasferimento (che ora dovrebbe essere più veloce perché i due file sono identici) ora mostra alcuna differenza.
Il comando (sanificato per rimuovere le informazioni sensibili) che sto usando è:
rsync 'ssh -p 9999' --progress LogFile michael@my.host.zzz:/home/michael/logs/LogFile
L'output che ottengo alla fine è simile al seguente:
LogFile
640,856,064 100% 21.25MB/s 0:00:28 (xfr$1, to-chk=0/1)
Non si parla di alcun tipo di accelerazione.
Sospetto che il problema potrebbe essere uno dei seguenti:
- Mi manca qualche opzione da riga di comando. Tuttavia, rileggere la pagina man sembra suggerire che i trasferimenti delta sono abilitati per impostazione predefinita: vedo solo le opzioni per disabilitarli.
- Sto usando rsync su ssh (anche su una porta non standard) a causa del fatto che il server si trova dietro un firewall che consente solo ssh. Non ho visto nulla che dica esplicitamente che i trasferimenti delta non funzioneranno se il demone rsync non è in esecuzione. Ho provato a usare la notazione "::" anziché ":" ma la pagina man non è molto chiara su cosa sia un "modulo" e il mio comando è stato respinto per aver specificato un modulo non valido.
Ho escluso quanto segue:
- trasferimenti delta non eseguiti su una rete locale. Eliminato perché sto cercando di eseguire il trasferimento su Internet
- spese generali dovute al calcolo del checksum. Ho visto questo comportamento sia su una connessione Wifi veloce che lenta e la velocità di trasferimento non sembra essere legata al calcolo.
rsync --stats
e anche -v -v
ottenere statistiche ancora più dettagliate. Rsync ti dirà quanti dati abbinati rispetto a quelli non corrispondenti c'erano.
but with the exception of the last 4k page (or maybe a few) the file is identical each time.
Lo hai effettivamente verificato concmp
? O meglio, conxdelta
o qualcosa del genere? Se vuoi davvero ridurre al minimo le dimensioni del trasferimento, mantieni localmente la vecchia e la nuova versione, in modo da poter calcolare localmente una differenza binaria minima (con qualcosa di diverso da rsync) e inviarla senza dover inviare checksum sulla connessione misurata. Fare questo a livello di record di database anziché a livello di file binario è probabilmente ancora migliore, come suggerisce Derobert.