Мне нужно хранить два файла A и B, которые являются очень большими (например, 100 ГБ). Однако B скорее всего будет похож на большие части на A, чтобы я мог хранить A и diff (A, B). Есть два интересных аспекта этой проблемы:
- Файлы слишком большие, чтобы их можно было анализировать с помощью любой библиотеки diff, о которой я знаю, потому что они находятся в памяти
- Мне действительно не нужен diff - diff обычно имеет вставки, изменения и удаления, потому что он предназначен для чтения людьми. Я могу уйти с меньшей информацией: мне нужен только "новый диапазон байтов" и "копировать байты из старого файла из произвольного смещения".
В настоящее время я не понимаю, как вычислить дельта от А до В в этих условиях. Кто-нибудь знает об этом алгоритме?
Опять же, проблема проста: напишите алгоритм, который может хранить файлы A и B с максимально возможным количеством байтов, учитывая тот факт, что оба они очень похожи.
Дополнительная информация: Хотя большие части могут быть идентичными, они, вероятно, будут иметь разные смещения и быть не в порядке. Последний факт заключается в том, почему обычный diff может не сэкономить.