gzipで圧縮された非常に大きなファイルがディスク上にあります。実稼働環境は「クラウド」ベースであるため、ストレージのパフォーマンスはひどいですが、CPUは問題ありません。gzip -dc
以前は、データ処理パイプラインはディスクからデータをストリーミングすることから始まりました。
ここで、作業を並列化するために、それぞれがバイトオフセットのペア(開始と終了)を取り、ファイルのそのチャンクを受け取る複数のパイプラインを実行したいと思います。プレーンファイルの場合、これはとで実現できますが、圧縮ファイルで効率head
的tail
に行う方法がわかりません。Igzip -dc
とパイプをhead
使用すると、ファイルの終わりに向かっているオフセットペアは、ファイルがゆっくりと解凍されるため、ファイル全体を無駄に探す必要があります。
だから私の質問は本当にgzipアルゴリズムについてです-その時点までファイル全体を解凍することの完全な意味なしに、基礎となるファイルのバイトオフセットを探すか、その任意のチャンクを取得することは理論的に可能ですか?そうでない場合、I / Oスループットのオーバーヘッドを最小限に抑えながら、複数のプロセスによる「ランダム」アクセスのためにファイルを効率的にパーティション分割するにはどうすればよいでしょうか。