Есть два компьютера с одинаковым количеством файлов. Как мы узнаем, есть ли небольшое изменение в любом из файлов на одном компьютере. Сетевая связь очень медленная между этими компьютерамиРазница в файле на двух разных компьютерах
ответ
Вы можете хэш-файлы и сравнить хэши через сеть.
Хорошая хеш-функция спроектирована так, что если во входной функции есть только небольшое различие, то выход будет совершенно другим. Кроме того, большинство хэш-функций имеют выходную длину 160-512 бит в настоящее время. Если вы захотите сравнить два файла размером в несколько гигабайт, вам нужно будет отправить небольшую строку по 512 бит по сети, чтобы узнать, соответствуют ли хэши.
Если у вас есть миллионы файлов, возможно, это было бы уже много. Решение будет выглядеть следующим образом:
- Hash каждый файл на каждом компьютере
- Затем конкатенации хэш и хэш сцепленной строки снова
- Теперь сравните этот вывод, если он отличается вы знаете, что есть разница в этих файлах.
- Чтобы узнать, какой файл отличается (или даже где именно в файле), вы можете использовать двоичный поиск:
- Разделить миллионы файлов на две части, перейдите к шагу 1-3 (если у вас достаточно места, вы можете сохраните хэш каждого файла для ускорения).
- Теперь для каждого из двух хешей, которые отличаются, переходите к шагу 4-6 рекурсивно.
- Если вы обнаружили файлы, которые отличаются, вы можете снова разбить файл на количество строк и работать как в 4-6.
- В какой-то момент количество строк будет таким маленьким, что хэш может быть длиннее фактического содержимого строк. Теперь, конечно, более эффективно сравнивать фактический контент наивным образом.
Предполагая, что у вас будет только один файл, который отличается от этого, потребуется только логарифмическое множество хэшей, которые будут отправляться по сети и, следовательно, минимизировать сетевой трафик.
Одной из идей было бы создать хэш для каждого файла. Хэши конвертируют произвольный файл длины в фиксированный размер. Вы могли бы дополнительно использовать хэш вместе, затем загрузить его и сравнить. Хеширование - это то, что используется широко, чтобы гарантировать, что загрузки не повреждены.
Спасибо ... Можете ли вы пожалуйста, уточните немного. Мне задали этот вопрос в интервью для позиции, связанной с веб-безопасностью (ясно, что я не подходит для этого). Позвольте мне перефразировать вопрос: миллионы файлов в двух системах и в сети медленные. Как мы можем проверить, не существует ли один символ в каком-либо одном файле –
Вы хотите найти конкретный символ или просто найти файл с несогласованным характером? –
Вы можете использовать утилиту md5sum. Для окон, пожалуйста, проверьте [это] (https://support.microsoft.com/en-us/help/889768/how-to-compute-the-md5-or-sha-1-cryptographic-hash-values-for-a-file) и для использования linux md5sum filename
, а затем сравните значения хэша.
Спасибо ... Можете ли вы, пожалуйста, немного уточнить, что мне задали этот вопрос в интервью для позиции, связанной с веб-безопасностью (ясно, что я не подходит для этого). Позвольте мне перефразировать вопрос: Миллионы файлов в двух системах и в сети медленные, Как мы можем проверить, не существует ли один символ в одном файле –
@VivekKumar см. Мое редактирование –