なぜ1250の文字列と90kのパターンの照合が非常に遅いのですか


12

私の文字列は、次のようなファイルパスです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)

3
タイトルが90kあり、説明に20Kパターンがある
-RomanPerekhrest

2
さて、90kは私の元の入力サイズであり、そのためマシンのスワップが非常に難しくなり、そのためgrepを削除する必要があります。それから私はこれを20kファイルに分割しようとしましたが、それはまだひどく動作します...しかし、あなたは私の説明が矛盾していることは正しいです。
スカウラス

2
の間にサーバーが過負荷になった(他のリソースを大量に消費するタスクを実行した)かどうかを明確にしてくださいgrep
agc

2
で再生できxxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)ます。正規表現のコンパイルと大量のメモリの割り当てに時間がかかっているようです。の-F代わりに-E、それは瞬時です。
ステファンシャゼラス

2
それについては、n7ce49B_.+それと同等ではありませんn7ce49B_.
ステファンシャゼラス

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.