@ramidon
начинающий программист

Какой алгоритм сжатия данных использовать при архивации лог файлов?

Стоит задача написать архиватор лог файлов
Алгоритмов сжатия данных немало и у каждого своя спецификация.
Как определить какой алгоритм сжатия данных нужно использовать для архивации файла, в котором много повторяющихся элементов?
  • Вопрос задан
  • 1014 просмотров
Пригласить эксперта
Ответы на вопрос 4
Zettabyte
@Zettabyte
Проф. восстановление данных ▪ Вопрос? См. профиль
Из "традиционных" Линуксовых лучше всего сжимает BZIP2.
Ещё лучше будет сжимать LZMA (7-Zip), в нём выставляете максимально большой размер словаря, на который у вас хватит памяти, word size ставите на максимум.

Также протестируйте PPMd, выставив те же настройки вверх, этот алгоритм тоже есть в 7-Zip. Я давно им не пользовался и ничего не читал, но раньше он был хорош для текстов и логов.

У 4-го WinRAR'а был preset именно для текстов и логов, проверьте и его (не знаю сохранился ли он в 5-й версии).

Ну и почитайте MaximumCompression, там наверняка найдётся алгоритм, который легко зарулит всех выше, но будет работать полдня.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
"Стоит задача написать архиватор лог файлов"

"Алгоритмов сжатия данных немало и у каждого своя спецификация.
Как определить какой алгоритм сжатия данных нужно использовать для архивации файла, в котором много повторяющихся элементов?"

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

Что я могу подсказать, так это свою догадку, что хотел ваш препод, но для этого нужно понять принципы алгоритмов сжатия по словарю - когда вы анализируете файл, находите в нем что-то похожее, составляете словарь похожих частей и сжимаете используя этот словарь.
Так вот - в случае сжатия нескольких файлов, можно использовать словарь первого файла для сжатия второго и так далее.
В архиваторах это называется solid архив.
Его преимущество - меньший размер.
Недостаток - при распаковке одного конкретного файла (например последнего), вам придется распаковать все предыдущие.
Ответ написан
Типично используется алгоритм сжатия GZip.
bzip2 сжимает лучше, но он работает медленнее. А лучше всего будет сжимать xz (LZMA).
Если Linux, то есть программа logrotate и тогда ничего не надо выдумывать. Она и сжимает в gzip и занимается ротацией логов.
Ответ написан
@dmshar
Если это реальная задача - то бессмысленно что-то писать самому. Берете готовые, проверяете их на реально имеющихся лог-файлах, сравниваете,делаете выводы, лучший запускаете в продакшн.
Если это учебная задача - просто научиться реализовывать архиваторы - то изучаете существующие алгоритмы и реализуете любой из них. Все равно, ваша учебная реализация будет хуже, чем имеющиеся коммерческие. Поэтому сравнивать их никто в здравом уме не будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы