Чому зіставлення 1250 рядків проти шаблонів 90k так повільно?


12

Мої рядки - це файлові контури на зразок s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; мої візерунки досить прості, всі подобаються n7ce49B_.+.

Я працюю GNU grep 2.6.3під Debian 6.0.10 на сервері Dell DL360G7 (я згадую це лише для того, щоб дати відчуття цієї машинної продуктивності) з 15-ти кілометровими дисками, і ця команда: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_fileпросто не вдається виконати - сервер занадто сильно міняється. З 20-кратними візерунками це займає більше 3 годин.

Це мені здається нерозумним.

За запитом коментарів є файли: шляхи до файлів 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 - це мій вихідний розмір вводу, і це робить мій апарат таким чином важким, що мені доведеться вбити цей греп. Потім я спробував розділити це на 20 тис. Файлів, і це все ще жахливо працює ... Але ви праві, що мій опис суперечливий.
skaurus

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_.
питанні

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.