Algo como um resumo de mensagem, mas que descreve progressivamente um arquivo
-
27-10-2019 - |
Pergunta
Eu tenho um conjunto de nós geograficamente remotos com sistemas operacionais heterogêneos que precisam transferir arquivos e atualizações usando um programa Java que estou escrevendo.No momento preciso enviar o arquivo inteiro novamente se o arquivo for alterado.Existe uma maneira de determinar as seções dos arquivos que são diferentes e apenas enviá-las (observe que esses arquivos não são necessariamente texto, podem ter qualquer formato).A única maneira que consigo pensar é dividir o arquivo em blocos, fazer o hash dos blocos e enviar os hashes de volta ao solicitante, que então solicita apenas os blocos necessários, mas para blocos pequenos e arquivos grandes, isso é uma grande sobrecarga, então existe algum maneira de enviar alguma mensagem descrevendo meu arquivo de forma que a mensagem singular possa ser analisada para fornecer uma lista dos blocos que precisam ser transmitidos?
A maioria das funções de resumo são projetadas de forma que uma pequena alteração nos dados resulte em uma grande alteração em toda a saída do hash. Basicamente, preciso do inverso disso, que funcionará em todos os sistemas operacionais.
Solução
Se entendi sua pergunta corretamente, você precisa manter os arquivos sincronizados em dois sistemas.Existe uma ferramenta chamada rsync
que pode sincronizar dois arquivos (ou diretórios inteiros) enviando apenas as alterações feitas no arquivo.
Você também pode estar interessado no Algoritmo Rsync.