В релизе MinLZ v1.2.0 появилась очень полезная фича: поиск byte sequences прямо по сжатому потоку. Обычно, чтобы найти строку в архиве или логе, нужно сначала распаковать всё. MinLZ делает иначе: добавляет небольшой search index по блокам и распаковывает только те блоки, где совпадение вообще возможно.
Как это работает:
* каждый блок получает маленькую bloom-filter таблицу
* при поиске MinLZ быстро проверяет, может ли паттерн быть в блоке
* если точно не может — блок пропускается
* если может — только тогда блок декодируется и сканируется
Индекс можно встроить при сжатии или собрать потом как sidecar-файл, не трогая исходные сжатые данные. Старые MinLZ-ридеры такие chunks просто игнорируют, так что совместимость сохраняется.
Самый красивый пример из релиза: поиск строки в 10 GB CockroachDB log, сжатом до 578 MB, занял 0.14 секунды через
mz search. Обычный путь через decompression + grep занимал около 5 секунд, а lz4 -dc | grep — около 10 секунд.Но это не магия для всего подряд.
MinLZ особенно хорош, когда нужно искать редкие literal byte strings: ID, error codes, request paths, hostnames, JSON keys, hashes. Для regex, fuzzy search, case-insensitive поиска или очень частых паттернов выигрыш может исчезнуть.
Доступно как CLI и как Go API.
GitHub: https://github.com/minio/minlz/releases/tag/v1.2.0
