Mengapa mencocokkan 1250 string dengan pola 90k sangat lambat?

12

String saya adalah path file seperti s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; polanya cukup sederhana, semuanya suka n7ce49B_.+.

Aku berlari GNU grep 2.6.3di bawah Debian 6.0.10 pada Dell DL360G7 Server (saya menyebutkan itu hanya untuk memberikan rasa mesin kinerja ini) dengan 15k HDD, dan perintah ini: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_filehanya tidak bisa lengkap - swap Server terlalu parah. Dengan pola 20k dibutuhkan lebih dari 3 jam.

Bagi saya itu tidak masuk akal.

Per permintaan komentar, ada file: path file pola 20k

Seseorang juga dapat menguji dan menyesuaikan jumlah garis dan pola input dengan:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
skaurus
sumber
3
judul Anda memiliki 90k, deskripsi memiliki 20Kpola
RomanPerekhrest
2
Nah, 90k adalah ukuran input asli saya dan itu membuat mesin saya bertukar sangat keras sehingga saya harus membunuh grep itu. Kemudian saya mencoba untuk memecah ini menjadi 20k file dan masih berfungsi dengan buruk ... Tapi Anda benar bahwa uraian saya tidak konsisten.
skaurus
2
Tolong jelaskan apakah server mungkin telah kelebihan pembayaran (melakukan beberapa tugas sumber daya lainnya) selama grep.
agc
2
Satu dapat mereproduksi dengan xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000). Sepertinya waktu dihabiskan untuk menyusun regexps dan mengalokasikan banyak memori. Dengan -Falih-alih -E, itu instan.
Stéphane Chazelas
2
Untuk itu, bukan itu n7ce49B_.+setara dengann7ce49B_.
Stéphane Chazelas

Jawaban: