私は何万ものgzipで圧縮されたテキストファイルを持っていますが、各ファイルはすでに内部的に整列しています。
sort -m
解凍(コピー作成)およびマージに使用するスクリプトを作成しました。
すべてがうまくいっていましたが、パフォーマンスを向上させようとしている間、解凍操作は全体の実行時間の約16〜20%を占めています。
デフォルトでは、マージ操作は全文ファイルを繰り返しスキャンして、16ファイルを一度に1つにマージする必要があります。通常、これにより、私が保持しているデータの完全スキャンは約4〜5回発生します。解凍すると、実際に追加のスキャンが追加されます。
50〜100GBのデータを使用して、5〜6回のスキャンのうち1回を節約すると、膨大な節約が得られます。
gunzip
sort
それで、直接出力入力(または他のツール)を使用して、基本的に解凍ラウンドとマージの最初のラウンドを組み合わせることができるかどうか疑問になり始めました。出力はgzipに圧縮されません。
これが可能かどうかを知っている人はいますか?理想的には標準的なツールを使用しますが、要件が正しい場合は、サードパーティ製のツールも使用できます。
ベストアンサー1
zcat
プログラム(または)を介してgzip -cd
解凍されたデータを標準出力に書き込むことができます。ここでは、bashのプロセス交換を使用できます。1.gz
は数字 1 から 3、a.gz
文字 a から c はz.gz
数字 4 と文字 d です。
$ sort -m <(zcat 1.gz) <(zcat a.gz) <(zcat z.gz)
1
2
3
4
a
b
c
d
あなたのデータがもう少し興味深くなることを願っています。