Является ли rsync хорошим вариантом для синхронизации одного небольшого файла?

Является ли rsync хорошим вариантом для синхронизации одного небольшого файла?

Мне приходится обновлять один относительно небольшой файл через медленное и нестабильное модемное соединение.

Файл представляет собой XML, который может начинаться с 15 КБ, а через два часа заканчиваться 500 КБ.

Это однонаправленная репликация. Мое текущее решение продолжает загружать весь файл каждую минуту. Пока что оно отлично работает с широкополосными соединениями, но теперь мне приходится использовать его в месте, где доступен только dial-up. Иллюзия «данных в реальном времени» теряется, поскольку загрузка идет медленно.

Я думал, что rsync может спасти меня от разработки проприетарного (и неэффективного) протокола "delta-only". Интересно, даст ли rsync реальные преимущества в этом конкретном случае.

Итак, вопрос: подойдет ли протокол rsync для одного файла размером от 15 до 500 Кб?

решение1

Не в этом случае. Лучше использовать что-то вродеdiffxmlдля отправки только разницы между файлами в качестве обновления и применения исправления на целевой машине.

решение2

Ну, я сделал это с помощью rsync, и должен сказать, что все сработало отлично.

Он передает так мало данных, что мне удалось сократить частоту обновления до 20 секунд при узкополосном коммутируемом соединении (на треть меньше предыдущей частоты, которую мы использовали при широкополосном доступе!).

Обновление XML-файла размером 800 КБ теперь требует загрузки 5 КБ + отправки 800 байт!

Проверка версий при отсутствии изменений в обновлении занимает меньше 500 байт при загрузке + 100 байт при отправке! (Я передаю больше байт, печатая в обычном сеансе чата!)

Намного лучше, чем другие решения для сравнения, и мне не пришлось ничего программировать. (Ранее мы думали о добавлении механизма push для запуска rsync, но пока он нам не нужен. 20 секунд вполне приемлемы, а опрос очень легкий.)

Молодец, rsync!

PS: Я не пробовал Git, хотя это, вероятно, тоже было бы хорошим решением.

Связанный контент