реклама на сайте
подробности

 
 
> Архиватор в микроконтроллере с малым требованием к ресурсам, сделать в МК архив, который на PC можно будет штатно разжать
Ruslan1
сообщение Nov 22 2016, 08:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!

Имеется кучка файлов, которые можно поделить на две группы
1) длинные текстовые- например, лог 6 мегабайт ежедневно
2) куча коротких текстовых - например, ежедневно директория с 1440 файлами по 200 байт (ежеминутные данные)

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

Архивация происходит периодически и не в реальном времени- например, раз в сутки для уже собранных файлов. То есть изменять архив не нужно и скорость работы функции не важна, фоновая задача.
Обязательное требование- чтобы на компьютере это можно было разжать, используя доступные в интернете стандартные архиваторы, а не писать свой распаковщик. Я точно не буду применять архиватор в нестандартный архив.
И еще крайне желательно, чтобы задача не требовала больших объемов памяти (временных буферов) во время работы. При этом скорость работы практически не важна.


Вопрос: есть ли примеры решения таких задач? аппноты какие-нибудь, блоги, линки....
Обычно на МК решается обратная задача - разжать (прошивку, образ итд), да и то из нестандартного формата, а вот упаковщики в "стандартный" архив как-то не попадаются.

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

конкретно буду реализовывать на STM32F4, если это важно
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Nov 25 2016, 07:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Архиватору требуется большой объем памяти для анализа инф-ии.
Если у Вас логи "типовые", то для создания словаря для паковки можно их (логи) слить
на PC, и получить "словарь", который потом прошить в контроллер.
Т.о. в контроллере будет не поный архиватор, а его урезанная часть,
с примитивным анализом - только на цепочки повторяющихся символов.
и упаковку "словарных" комбинаций.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 09:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Про контейнер- альтернативу использованию тара.
Как просто контейнер- ZIP формат без сжатия выглядит гораздо приятней (заголовок короче и файл занимает столько сколько занимает). В минусах что нужно обязательно CRC32 считать и (вроде бы обязательно) перепаковывать при добавке нового файла.
И еще документирован формат прекрасно- одного того "APPNOTE.TXT - .ZIP File Format Specification", на который я давал ссылку, достаточно для написания своего "упаковщика с уровнем сжатия 0".

Такое ощущение, что для меня писали, все ответы прямо в спецификации есть.
Цитата
4.1.3 Data compression MAY be used to reduce the size of files placed into a ZIP file, but is not required.
.....
4.1.7 Files MAY be placed within a ZIP file uncompressed or stored. The term "stored" as used in the context of this document means the file is copied into the ZIP file uncompressed.

кто-то развлекался? где незамеченные мной подводные камни?

вот тут еще красивей нарисовано что к чему, отличное дополнение у чисто текстовому описанию основной спецификации.
Сейчас поигрался- получается что зип-контейнер (без компрессии) на 10 файлов по 175 байт занимает 3854 байта, это почти в 3 раза меньше чем длина тара для них же (10752 байта).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 25 2016, 10:00
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Ruslan1 @ Nov 25 2016, 12:13) *
Сейчас поигрался- получается что зип-контейнер (без компрессии) на 10 файлов по 175 байт занимает 3854 байта, это почти в 3 раза меньше чем длина тара для них же (10752 байта).

10 * 175 = 1750. "Выигрыш" ... неочевиден. biggrin.gif
Может, лучше придумать свой компактный формат логов? Типа, не писать нули подряд, записывать дельту, и т.п.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 10:15
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(ViKo @ Nov 25 2016, 12:00) *
10 * 175 = 1750. "Выигрыш" ... неочевиден. biggrin.gif
Может, лучше придумать свой компактный формат логов? Типа, не писать нули подряд, записывать дельту, и т.п.

ViKo, Вы что имеете в виду? Я не понял что с чем Вы сравнили. 10 файлов без контейнера занимает не 1750 байт, а 10 кластеров на диске (в лучшем случае- 20 килобайт, в худшем/стандартном - 320 килобайт)

Цитата(gerber @ Nov 25 2016, 11:21) *
Ещё ISO есть.

Не, спасибо, это не буду. Тут психологический барьер: tar и zip для контейнера это нормально, а iso - это для другого sm.gif
Go to the top of the page
 
+Quote Post
gerber
сообщение Nov 25 2016, 10:34
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(Ruslan1 @ Nov 25 2016, 13:15) *
Не, спасибо, это не буду. Тут психологический барьер: tar и zip для контейнера это нормально, а iso - это для другого sm.gif

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


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 20:24
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(gerber @ Nov 25 2016, 12:34) *
Ну и зря rolleyes.gif , если вспомнить, как устроен и пишется оптический диск, то станет понятно, что для непрерывного добавления файлов это самое оно и есть.

Перепроверил: у ISO большой заголовок на диск, и он хранится в теле этого iso файла. Плюс минимальный размер сектора - 2 килобайта, и каждый файл в своем секторе. В результате стоимость входа 50 килобайт, плюс по 2 килобайта на файл.
В-общем, это как переход от одной операционки к другой, выигрыша по занимаемому месту нет никакого так как нужно хранить файловые таблицы и файлы квантуются сектором 2К.

Пока что zip видится лучшим контейнером. попробую накропать что-то за вечерок... CRC32 не нравится, да и промежуточный буфер(даже файл) нужен для хранения этих хвостовых central directory header, но нет в мире совершенства....
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 27 2016, 23:13
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



В-общем, реализовал tar с дописыванием в архив новых файлов по нужде. Имею желание в будущем добавить gzip и получить tgz.

сам по себе zip - тупик, если нужно даже сжать много файлов. Как контейнер он лучше чем tar, а дальше сплошные минусы и по сложности подготовки(нужно много данных хранить даже просто для организации контейнера,) и в будущем сжатия большого не даст. А делать zip для контейнера и потом еще раз сжимать этот зип как один файл- это мазохизм, уж лучше стандартный путь, через тар. Ну и с таром дописывание- это норма, а не изврат как с зипом.

Кстати, с Таром тоже хватило эротики- описание только на первый взгляд понятное, пришлось и в исходники за деталями залезть, а они не самые простые. Первые(простые)- не годятся, так как формат поменяли по дороге, по этой же причине в интернете разброд и шатание, могу найти противоречащие друг другу описания.
Более того- разные программы дают разный файл, и по хедеру и по длине, например ТоталКомандер и 7-zip, но не отказываются раскодировать файлы друг друга- видна повышенная толерантность и пофигизм к содержимому неосновных полей хедера и финальному маркеру sm.gif (7Zip- лучше, я не нашел отклонений от описания в полученном с его помощью файле).

следующий виток- gzip, но тут вроде есть готовое, хочу попробовать mini_gzip
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ruslan1   Архиватор в микроконтроллере с малым требованием к ресурсам   Nov 22 2016, 08:58
- - Огурцов   есть же какой-то зип открытый, только возьми и ско...   Nov 22 2016, 09:18
- - AlexandrY   Цитата(Ruslan1 @ Nov 22 2016, 10:58) Я то...   Nov 22 2016, 09:40
|- - Ruslan1   Цитата(AlexandrY @ Nov 22 2016, 11:40) Те...   Nov 22 2016, 10:50
|- - SasaVitebsk   Цитата(AlexandrY @ Nov 22 2016, 12:40) Но...   Nov 22 2016, 16:47
|- - AlexandrY   Цитата(SasaVitebsk @ Nov 22 2016, 18:47) ...   Nov 22 2016, 17:10
- - aiwa   minilzo (__http://www.oberhumer.com/opensource/lzo...   Nov 22 2016, 12:20
|- - Ruslan1   Цитата(aiwa @ Nov 22 2016, 14:20) minilzo...   Nov 22 2016, 13:03
|- - HardEgor   Цитата(Ruslan1 @ Nov 22 2016, 20:03) Прич...   Nov 22 2016, 13:48
||- - Ruslan1   Цитата(HardEgor @ Nov 22 2016, 15:48) tar...   Nov 22 2016, 17:09
|- - blackfin   Цитата(Ruslan1 @ Nov 22 2016, 16:03) Все ...   Nov 22 2016, 19:19
- - vladec   zip-ы, rar-ы, tar-ы и т.п. требуют для своей работ...   Nov 22 2016, 12:39
|- - AlexandrY   Цитата(vladec @ Nov 22 2016, 14:39) zip-ы...   Nov 22 2016, 12:51
- - SasaVitebsk   Речь шла о текстовом документе. Скажем так. Пробов...   Nov 22 2016, 19:06
|- - Ruslan1   Цитата(SasaVitebsk @ Nov 22 2016, 21:06) ...   Nov 22 2016, 19:14
|- - SasaVitebsk   Цитата(Ruslan1 @ Nov 22 2016, 22:14) ...   Nov 22 2016, 19:19
- - makc   Посмотрите на https://github.com/atomicobject/heat...   Nov 22 2016, 20:25
|- - AlexandrY   Цитата(makc @ Nov 22 2016, 22:25) Посмотр...   Nov 22 2016, 21:38
|- - Ruslan1   Хм. Или никто не знает, или посчитали несущественн...   Nov 24 2016, 23:38
|- - makc   Цитата(AlexandrY @ Nov 23 2016, 00:38) Хо...   Nov 25 2016, 03:46
|- - ViKo   Цитата(Ruslan1 @ Nov 25 2016, 13:15) ViKo...   Nov 25 2016, 10:23
||- - Ruslan1   Цитата(ViKo @ Nov 25 2016, 12:23) В вашем...   Nov 25 2016, 10:55
||- - ViKo   Цитата(Ruslan1 @ Nov 25 2016, 13:55) Вы, ...   Nov 25 2016, 11:20
|||- - Ruslan1   Цитата(ViKo @ Nov 25 2016, 13:20) Понятно...   Nov 25 2016, 12:45
||- - AlexandrY   Цитата(Ruslan1 @ Nov 25 2016, 12:55) Вы, ...   Nov 25 2016, 11:24
|||- - Ruslan1   Цитата(AlexandrY @ Nov 25 2016, 13:24) Чт...   Nov 25 2016, 11:42
||- - mantech   Цитата(Ruslan1 @ Nov 25 2016, 13:55) Вы, ...   Nov 25 2016, 13:36
- - gerber   Ещё ISO есть.   Nov 25 2016, 09:21
- - firew0rker   Я применила для такой задачи (сбор и ежесуточное а...   Dec 7 2016, 03:29
|- - Alechek   Цитата(firew0rker @ Dec 7 2016, 08:29) Дл...   Dec 7 2016, 05:15
- - firew0rker   Так мне и надо было распаковать 1 файл на МК. Если...   Dec 7 2016, 06:27
- - AlexandrY   Цитата(firew0rker @ Dec 7 2016, 08:27) Ес...   Dec 7 2016, 06:55
- - firew0rker   Цитата(AlexandrY @ Dec 7 2016, 13:55) Пок...   Dec 7 2016, 08:43
- - AlexandrY   Цитата(firew0rker @ Dec 7 2016, 10:43) mi...   Dec 7 2016, 09:32
- - firew0rker   Цитата(AlexandrY @ Dec 7 2016, 16:32) Да ...   Dec 7 2016, 13:04
- - Ruslan1   Спасибо, но на линукс ради архиватора переходить н...   Dec 7 2016, 19:58
- - jcxz   Цитата(Ruslan1 @ Dec 7 2016, 22:58) У мен...   Jan 3 2017, 16:50
- - Ruslan1   Цитата(jcxz @ Jan 3 2017, 18:50) Как я по...   Jan 3 2017, 19:30


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016