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