2009-09-20 3 views
2

Я планирую написать программу для синхронизации папки в реальном времени на нескольких компьютерах через Интернет. Мне интересно, есть ли какой-либо алгоритм синхронизации для обработки конфликтов синхронизации файлов, т. Е. Компьютер A пытается сохранить файл, а компьютер B удалил файл.Есть ли какой-либо алгоритм/справочник синхронизации для синхронизации каталога?

ответ

8

Пример, который вы дали, именно поэтому синхронизация считается трудной проблемой.

Компьютер A удалил файл, который еще имеет компьютер B. Теперь: откуда вы знаете, был ли файл добавлен в B и должен быть скопирован в A или удален на A и должен быть удален на B? На самом деле ты этого не делаешь. Многие системы синхронизации имеют возможность возникновения противоречивых изменений, которые необходимо решить человеку.

Многие инструменты уже были построены, чтобы сделать синхронизацию, в том числе:

  • системы управления версиями, как CVS, Subversion, Mercurial, Git, Perforce и т.д.
  • автономных, однонаправленных программ синхронизации. Они не могут обрабатывать изменения с обеих сторон, но они могут сделать целевой каталог похожим на исходный каталог. Это лучше, чем полная копия, потому что это быстрее, но на самом деле это одно и то же. Примеры включают rsync, ROBOCOPY и XCOPY/MIR в Windows.
  • простые в использовании средства синхронизации Интернета, которые синхронизируют папки на нескольких компьютерах. Примеры включают Windows Live Folder и Dropbox. Эти приложения часто разрешают конфликты, делая дополнительные копии обеих версий в подкаталогах, чтобы впоследствии вы могли отсортировать их. Они действительно предполагают, что конфликтов очень мало.
  • встроенной синхронизации в сложных приложениях, например, электронную почту/контактов/синхронизации календаря в Microsoft Exchange, Lotus Notes и т.д.
3

Вы также можете посмотреть в Unison. Это многонаправленный инструмент синхронизации файлов, который использует алгоритм rsync, чтобы убедиться, что отправлены только измененные части файлов.

Смежные вопросы