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