Como a maioria dos programas de sincronização monitora as alterações nos arquivos?

9

Os programas de sincronização, como o Dropbox, geralmente rastreiam alterações de arquivo, fazendo comparações de byte a byte, ou usando hashes, ou usando diff/ mantendo logs de confirmação locais, como controle de versão, ou o quê?

mcandre
fonte

Respostas:

8

No Windows, existe um mecanismo para o sistema operacional alertá-lo quando houver uma alteração na estrutura de diretórios 'assistida' - FindFirstChangeNotification (). Quando isso indica que um arquivo foi alterado, um aplicativo pode comparar arquivos no diretório alterado para encontrar os arquivos reais que foram alterados, analisando tamanho, data de modificação, hash etc.

Isso (como Michael aponta abaixo) é algo que cada plataforma forneceria de alguma maneira. Eu não estava dizendo que esse tipo de coisa era exclusiva do Windows.

GrandmasterB
fonte
11
E há inotify no Linux.
Michael
Mas e se o programa de sincronização não estivesse em execução no momento da alteração do arquivo? Não perderia a oportunidade de ser notificado pelo gancho?
22612 mcandre
Você usou o exemplo específico de caixa de depósito, que geralmente está sendo executada em segundo plano. Obviamente, se o programa não estiver em execução, ele não será notificado. Então ele tem que usar outros métodos (data de modificação, talvez). Eu não acho que você receberá uma resposta concreta sobre quais são os métodos específicos utilizados, porque programas diferentes fazem as coisas de maneira diferente. Melhor perguntar aos criadores dos programas específicos em questão.
GrandmasterB
@mcandre Praticamente o que GrandmasterB disse - se você perdeu a notificação, teria que verificar a pasta. Dependendo de quão "preciso" você desejar, isso pode significar simplesmente procurar novos arquivos e carimbos de data / hora modificados (estes são relativamente baratos de fazer) ou, na pior das hipóteses, comparar o arquivo inteiro. Programas como o rsync tipicamente fazem o hash do arquivo em pedaços, para que as alterações iniciais dos dados possam ser detectadas mais cedo, mas na pior das hipóteses (os arquivos são idênticos), você lerá tudo isso.
Daniel B
2

Por fim, para comparar arquivos, você precisa comparar cada byte - de que outra forma você notaria uma alteração de byte único?

Na realidade, você lê blocos de bytes e calcula um valor de hash, e depois verifica uma lista de hashes. Um bom exemplo é " rsync "

Até onde eu sei, o dropbox deduz apenas arquivos inteiros, então calcula um hash do arquivo inteiro para verificar o mesmo arquivo

Martin Beckett
fonte
11
pst em alguns sistemas de arquivos há uma data modificada
aberração catraca
11
O hash não criaria um risco pequeno, mas real, de colisões, resultando em um arquivo não sendo sincronizado? O Dropbox aparentemente usa uma implementação do tipo diff. dropbox.com/help/8/pt
mcandre
11
@candre que parece que seria melhor como sua própria pergunta.
GrandmasterB
@ratchetfreak: a data de modificação, em alguns sistemas, não é necessariamente confiável para esse tipo de problema. Um simples toque faria com que a data da modificação fosse diferente, onde uma sincronização pode não ser realmente necessária.
Steven Evers
11
@SnOrfus em seguida, verificar o dobro das mudanças quando a data de modificação é alterado
catraca aberração
1

O .NET, por exemplo, tem uma classe FileSystemWatcher. Tenho certeza de que outros idiomas e tempos de execução de baixo nível podem fornecer recursos semelhantes.

Nik
fonte