Назад | Перейти на главную страницу

Есть ли формат сжатия, поддерживающий хвостовые операции?

Я ищу формат сжатия, поддерживающий tailизд. Это означает, что вам не нужно читать весь файл, чтобы получить последние X несжатых байтов. Возможно ли это с любым из форматов, таких как bzip2, xz, lzma и т. Д.?

Однажды я написал что-то с помощью gzip, которое могло бы это сделать. По сути, на действительно высоком уровне он собирал несколько блоков gzip вместе, а затем у меня была утилита, которая могла искать в обратном направлении от конца файла до момента запуска последнего блока. Эти файлы были полностью доступны для чтения стандартными утилитами gzip, но я надеюсь, что есть что-то более стандартизованное.

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

gzip имеет параметр --rsyncable который делает то же самое. Нестандартной частью может быть утилита ztail, поддерживающая gzip-block, но, похоже, вы уже с этим справились.

FWIW: я разработал инструмент командной строки на zlib's zran.c исходный код который создает индексы для файлов gzip: https://github.com/circulosmeos/gztool

Он может создать непрерывный хвост из gzip-файла с -T вариант. Или просто хвост последнего содержимого и остановка, с -t (Доступно множество других вариантов).

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

Индексы могут быть прерваны в любое время и повторно использованы и / или дополнены позже. И, как gztool можно просто приказать извлечь данные из любого места в файле, и он создаст индекс, чередующийся с этим действием, при его использовании никогда не теряется время.