У меня очень большой файл, сжатый с помощью gzip, сидящего на диске. Производственная среда - "облачная", поэтому производительность хранилища ужасная, но процессор в порядке. Раньше наш конвейер обработки данных начинался с gzip -dc потоковой передачи данных с диска.
Теперь, чтобы распараллелить работу, я хочу запустить несколько конвейеров, каждая из которых принимает пару байтовых смещений - начало и конец - и принимает этот фрагмент файла. С простым файлом это может быть достигнуто с помощью head и tail, но я не уверен, как это сделать с сжатым файлом; если я gzip -dc и pipe в head, пары смещения, которые находятся ближе к концу файла, будут бесполезно искать через весь файл, поскольку он медленно распаковывается.
Итак, мой вопрос действительно о алгоритме gzip - теоретически можно ли искать смещение байта в базовом файле или получить произвольный кусок из него без каких-либо последствий декомпрессии всего файла до этой точки? Если нет, то как еще я могу эффективно разбивать файл на "случайный" доступ несколькими процессами, минимизируя служебные данные пропускной способности ввода/вывода?