Алгоритм эффективного копирования файлов по сети - PullRequest
1 голос
/ 06 декабря 2011

Я знаю, что есть несколько программ, которые будут синхронизировать файлы по сети. Ни один из них не делает то, о чем я думал. Позвольте мне объяснить, чего я хочу достичь ...

В моей сети несколько компьютеров используют одни и те же файлы. например, файл quickbooks доступен для нескольких компьютеров, и это большой файл. также есть pst файлы из outlook large. каждую ночь мы создаем резервную копию по сети файлов, которые были изменены. Я думаю, что это не имеет смысла копировать весь файл размером 1 ГБ, если он имеет незначительные изменения. поэтому я хочу придумать алгоритм, который будет сравнивать части файлов.

например, допустим, что pst-файл outlook состоит из байтов:

1, 2, 3, 4, 5, 6, 7, 8, 9    

если я получу электронное письмо, байты теперь будут:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10    for example

теперь вместо отправки всего файла будет проще отправить только байт 10

так что на самом деле файл имеет тысячи байтов, поэтому я буду проверять контрольную сумму каждого мегабайта файла, поэтому теперь моя таблица должна выглядеть следующим образом:

aaa1, aaa2, aaa3, abf8, etc...   

если при получении электронного письма теперь в файле pst есть таблица:

aaa1, aaa2, aaa3,  7a8b, etc  ... then I know that the first 3 megabits are the same and I should send just one megabite instead of the entire file...

Я думаю, что этот алгоритм будет отлично работать, если контент был добавлен в конец файла, но в действительности байт может быть изменен в начале файла, и мой алгоритм не будет работать. например, если в начале файла добавляется один байт, все шестнадцатеричные коды изменятся ...

как я могу сделать алгоритм более эффективным? Было бы хорошо, если бы я мог послать части файла вместо всего файла

Ответы [ 2 ]

3 голосов
/ 06 декабря 2011

Протокол rsync эффективно синхронизирует большие файлы с небольшими отличиями.Это намного умнее, чем та схема, которую вы предусмотрели, поэтому вам следует либо прочитать рецензию Tridgell и Mackerras перед тем, как приступить к собственному решению, либо просто использовать rsync .Здесь есть бесплатная оболочка Windows .

2 голосов
/ 06 декабря 2011

Возможно, вы захотите просмотреть скользящие контрольные суммы , а алгоритм rsync использует .

По сути, вы вычисляете хеш, как описано выше для чанка, ноВы также вычисляете скользящую контрольную сумму.Скользящая контрольная сумма имеет свойства, которые позволяют более эффективно проверять, например, один байт, добавленный в начало файла.

...