Delphi: резервное копирование собственных файлов - PullRequest
0 голосов
/ 16 июля 2011

Есть папка - 7 Гб с большим количеством бинарных файлов.Средний размер двоичного файла составляет около 100 Кб.Эти файлы сжаты в архивах ZIP.Средний размер этого ZIP-архива составляет около 2 Мб.Поэтому мне нужно сделать резервную копию ZIP-архивов.

И мне нужно сделать резервную копию всей папки.Это может быть без сжатия данных.Основным требованием является быстрое резервное копирование.Следовательно, должна быть возможность восстановления файлов из резервной копии.

Например, можно использовать архив без сжатия данных, но добавление и извлечение файлов должно быть быстрым.Или можно использовать быстрое копирование.

Скажите, пожалуйста, как это сделать в Delphi или выскажите свои предложения.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 16 июля 2011

Как 7 ГБ макета данных? Сколько файлов? Какие файлы (БД, картинки, текст, документы, документы)? Каков средний / меньший / больший размер файла? Как изменяются файлы: новые файлы добавляются, файлы полностью изменяются, некоторые байты меняются / добавляются к некоторым существующим файлам?

Это важная информация для правильного выбора способа резервного копирования ...

Например, если ваши файлы не маленькие, просто скопируйте в другую папку (можно найти алгоритм для различий на уровне каталогов в этом устройстве ).

7 ГБ огромен для zip-архива. Конечно, вы можете работать с zip-файлами такого размера, но, по-моему, это неправильный формат для инкрементного резервного копирования.

Одна из проблем, связанных с форматом zip, заключается в том, что для обновления файла необходимо удалить предыдущую версию, поэтому все содержимое zip необходимо переписать ... в лучшем случае содержимое файла перемещается.

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

Я бы предложил использовать какой-нибудь формат плоского файла, такой как наш Open Source Synopse Big Table , и хранить либо простое содержимое, либо сжатую версию (не используйте формат zip / deflate, который работают медленно, но, например, наш алгоритм SynLZ , который быстрее любого другого - даже быстрее, чем LZO - для сжатия). Если сжатие выполняется быстрее, чем доступ к диску, резервное копирование будет выполняться быстрее: сжатие / сжатие медленнее, чем доступ к диску для сжатия, но SynLZ намного быстрее, поэтому вы сэкономите время за счет сжатия содержимого SynLZ.

В Big Table вы можете использовать метаданные в памяти для атрибутов файла (имя, версия, дата, атрибуты, идентификатор предыдущей версии ...), а затем разрешить сжатый контент на диске.

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

2 голосов
/ 16 июля 2011

Вы можете найти множество компонентов, которые помогут вам Zip / UnZip файл или папки здесь или здесь

...