From: Sergey Matveev Date: Tue, 19 Oct 2021 11:54:56 +0000 (+0300) Subject: Улучшения WARC-а в tofuproxy X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=cace83e27a1acafe57f32cc5eee4bb1078f20e74;p=stargrave-blog.git Улучшения WARC-а в tofuproxy https://iipc.github.io/warc-specifications/specifications/warc-zstd/ Прежде сжатые WARC-и в tofuproxy поддерживались, но никакого оптимального индексирования и перемещения по ним (по сегментам gzip или frame-ам zstd) не было. Теперь во время парсинга WARC-а все эти смещения учитываются и кладутся в индекс. С gzip-ом проблем не возникало, а вот с Zstandard все Go-шные библиотеки меня не устраивают: никто не предоставляет возможности остановится после чтения frame-а (кто-то предоставлял, но не работал по факту, падал). Залез в исходный код, но узнать при этом точное смещение начало/конца кадров как-то геморройно. В итоге написал на Си утилиту: zstd идёт в stdin, декомпрессия в stdout, в 3-ий файловый дескриптор TSV таблица смещений кадров и декомпрессированных данных. Взялся писать zstd компрессор который бы делал multi-frame компрессию WARC-ов, как это описано в черновике .warc.zst "стандарта", но он упорно не хотел заполнять размер кадров корректно (это опциональное поле), чего требовал стандарт. В итоге написал другую Си утилиту для этого, в которой без проблем всё формирую. .warc.zst оказывается вовсю уже делаются не первый год в Internet Archive. Более того, они делают сжатие с встроенным словарём, который тоже у меня поддерживается. Например: https://archive.org/details/archiveteam_yahooanswers_20210422220546_c4fac540 ---