From cace83e27a1acafe57f32cc5eee4bb1078f20e74 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 19 Oct 2021 14:54:56 +0300 Subject: [PATCH] =?utf8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B8?= =?utf8?q?=D1=8F=20WARC-=D0=B0=20=D0=B2=20tofuproxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 -- 2.50.0