私の文字列は、次のようなファイルパスですs/14/11/13/15/n7ce49B_235_25ed2d70.jpg
。私のパターンは非常に単純なもので、すべてが好きn7ce49B_.+
です。
私はDebian 6.0.10のGNU grep 2.6.3
下でDell DL360G7サーバー上で実行しています(このマシンのパフォーマンスの感覚を伝えるために言及しています)、15k HDD、およびこのコマンド:ちょうど完了できません-サーバースワップがひどく悪いです。2万パターンの場合、3時間以上かかります。time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file
それは理不尽に思えます。
コメントリクエストごとに、ファイルがあります:ファイルパス 20kパターン
また、入力行と入力パターンの数を次のようにテストおよび調整できます。
xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
さて、90kは私の元の入力サイズであり、そのためマシンのスワップが非常に難しくなり、そのためgrepを削除する必要があります。それから私はこれを20kファイルに分割しようとしましたが、それはまだひどく動作します...しかし、あなたは私の説明が矛盾していることは正しいです。
—
スカウラス
の間にサーバーが過負荷になった(他のリソースを大量に消費するタスクを実行した)かどうかを明確にしてください
—
agc
grep
。
で再生でき
—
ステファンシャゼラス
xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
ます。正規表現のコンパイルと大量のメモリの割り当てに時間がかかっているようです。の-F
代わりに-E
、それは瞬時です。
それについては、
—
ステファンシャゼラス
n7ce49B_.+
それと同等ではありませんn7ce49B_.
90k
あり、説明に20K
パターンがある