Вопрос

Мне нужно написать инструмент на C ++ для определения измененных битов в файле по сравнению с другим файлом для репликации. Каков наилучший способ достижения этого?

У меня нет конкретной ОС или библиотеки, я открыт для предложений. Моя основная задача - уменьшить объем сетевого трафика, участвующего в репликации.

Это было полезно?

Решение

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

Другие советы

Если вы не можете использовать rsync как есть, проверьте librsync . Он старый, но код легко читается и улучшается.

Если у вас нет старой и новой версий файлов на одном компьютере, то rsync-подобные алгоритмы - это путь вперед (см. предыдущие ответы). Если у вас есть и старая, и новая версии файлов на одном компьютере, вы можете сделать это лучше, чем rsync: создавать сжатые файлы различий и отправлять их по сети.

Для создания эффективных различий взгляните на двоичное дельта-сжатие VCDIFF (RFC 3284). Хорошей реализацией является xdelta (www.xdelta.org). Реализовать декодер / декомпрессор довольно легко, если вы хотите избежать использования xdelta на принимающей стороне из-за проблем с лицензией. Написание собственного генератора различий VCDIFF, который будет генерировать компактные разности, намного сложнее (например, поиск перемещенных блоков).

В VCDIFF различия также могут быть без исходного кода, то есть они распаковываются в целевой файл без исходного файла (файла, к которому применяется diff) - в VCDIFF сжатие файла является особым случаем создания сжатого файла. дельта между двумя файлами. Это полезно, потому что вы можете использовать один и тот же формат независимо от того, имеет ли место назначения версию вашего файла.

Я бы начал с некоторой реализации diff ( http://en.wikipedia.org/wiki / Diff )

предложение: используйте хэш-функцию & amp; разделить & amp; победить подход, чтобы сузить блок изменений. Не совсем решение для защиты от столкновений, но SHA-2 IMO может работать на вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top