Я занимаюсь разработкой инструмента резервного копирования и не могу найти наиболее эффективный способ сделать удаленное резервное копирование. Я не хочу отправлять весь файл каждый раз, когда есть небольшие изменения, поэтому я думаю, что инкрементное резервное копирование является решением. Это все хорошо, но теперь я застрял с проблемой, как я могу разбить один файл на несколько частей.
Проблема в том, что, скажем, у меня есть простой текстовый файл, а один кусок - одна строка:
First line
Second line
Third line
Fourth line
Теперь у меня есть 4 куска. Если я обновлю вторую строку, скажем, «Вторая строка», теперь мне нужно только сделать резервную копию второго блока.
Но что, если что-то подобное произойдет:
First line
First and half line
Second line
Third line
Fourth line
Теперь, когда я добавил «Первая и половина строки», каждая строка теперь находится в другом месте. Поэтому, если каждая строка представляет собой один блок, похоже, что каждый блок после первого изменился, даже если содержимое одинаково.
Есть ли простое решение для этого? Сначала я подумал, что могу сделать хэш для каждого чанка, а затем просто создать «каталог», который бы указывал правильный порядок чанков. Таким образом, я мог бы легко сопоставить, если фрагмент уже существует с хешем. Однако я понял, что решение для хеш-таблиц не будет работать ни с чем, кроме файлов, где фрагменты могут быть предсказаны и исправлены. Например, с бинарными файлами вы в значительной степени ограничены кусками с фиксированным байтовым размером, поэтому, если в начале было добавлено больше данных, и вы начали сокращать их, скажем, до 100 тыс. Кусков, вы получите другие данные в более поздних кусках, чем раньше.
Какие-нибудь решения?