Восстановить исходный файл из файлов diff для сохранения дискового пространства.

Каждый день загружается текстовый файл объемом 10 ГБ, файл составляет ~ 200 миллионов строк и ~ 1% строк меняются на следующий день. Я хочу хранить ежедневные файлы в качестве резервной копии, но я пытаюсь сохранить дисковое пространство с помощью процессора.

EDIT В настоящее время лучшим способом я нашел, чтобы сохранить файлы diff и перестроить их с помощью patch (как предложил @Simon), например, 01 января загружает большой файл, а затем целый месяц продолжает делать только diff diff 01jan.txt 02jan.txt > 02jan.diff; rm 02jan.txt diff 01jan.txt 02jan.txt > 02jan.diff; rm 02jan.txt и т. д. для каждого дня месяца.

Есть ли лучший способ сделать это?

3 Solutions collect form web for “Восстановить исходный файл из файлов diff для сохранения дискового пространства.”

Это программное обеспечение для управления версиями заданий, например Git, Bazaar или Subversion (плюс немного больше). Таким образом, ваш рабочий процесс может быть следующим:

  • В начале месяца создайте новый репозиторий.
  • Каждый день копируйте новые файлы в репозиторий и фиксируйте изменения
  • При желании удалите репозиторий в прошлом месяце.

Я не сильно изменяю файлы из месяца в месяц, просто работаю с одним хранилищем для каждого месяца.

Поскольку вы упомянули программу diff , я могу смело предположить, что вы говорите о текстовых файлах …

Как вы говорите, 10GB в 200 миллионов строк, это, кажется, один файл со средней длиной строки 50, которая выглядит нормально.

  • В такой ситуации система управления версиями – это правильный путь.

Вам нужно найти правильную систему управления версиями для вашей проблемы. Позвольте мне, таким образом, принять вашу информацию:

  • Одна новая версия файла каждый день и 1% контента меняются изо дня в день.

Учитывая, что git не поддерживает дельта файлов, а сохраняет gzip -4 сжатые полные файлы, я ожидаю, что после aprox. 2-3 недели, git будет потреблять больше дискового пространства, чем вы ожидаете. Так что git – не лучший инструмент для вашего дела.

Существуют и другие системы контроля версий, которые используют различия в методе обработки истории.

  • RCS сохраняет обратные различия и может быть решением, но RCS медленнее для файлов> 256 Кбайт, а для RCS требуется больше времени, если вам не нужна последняя версия, но что-то более старое.

  • SCCS основан на diffs, но формат хранения – это так называемый weave format который эффективно сохраняет все версии одновременно и позволяет вам получать любую версию в одно и то же фиксированное время.

SCCS создаст исходный файл истории 10 ГБ, и этот файл истории вырастет на 1% для каждой новой версии в вашем случае, поэтому я ожидаю, что файл истории будет использовать aprox. 36,5 ГБ через год. Для GIT я ожидаю, что дисковое пространство будет составлять 100-400 ГБ через год.

SCCS является OpenSource и может быть получен из:

http://sccs.sourceforge.net

SCCS поддерживается с 1972 года (43 года) и поэтому может рассматриваться как зрелый 😉 и BTW: я не знаю более быстрой системы контроля версий.

Проверьте «патч», еще в тот же день, когда мы загрузили исходный код ядра почти ежедневно. Это можно использовать для обновления исходного файла или возврата назад к предыдущим версиям с использованием файлов diff.

  • Получение отличия от обновления пакета
  • Патч-файлы
  • Получить правильное количество строк в разностном выходе
  • Ошибка с if : Слишком много аргументов
  • сравнить два файла XML
  • как использовать patch и diff для объединения двух файлов
  • colordiff - как сохранить цвет при сохранении файла
  • `diff -y file- {a, b} | less` и DOS.
  • Могу ли я получить противоположность `diff -q` - сопоставление идентичных файлов без печати их содержимого
  • Можно ли просматривать два текстовых файла бок о бок (только для чтения)?
  • Инструмент Diff с хорошим выходом, например kdiff3
  • дифференцируя два файла и получая уникальный результат в третьем
  • Linux и Unix - лучшая ОС в мире.