Почему сопоставление 1250 строк с образцами 90 КБ происходит так медленно?

12

Мои строки - это пути к файлам s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; мои шаблоны довольно простые, все как n7ce49B_.+.

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

Это кажется мне необоснованным.

По запросу комментария есть файлы: пути к файлам 20 тыс. Шаблонов

Можно также проверить и настроить количество входных линий и шаблонов с помощью:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
skaurus
источник
3
ваше название есть 90k, в описании есть 20Kшаблоны
RomanPerekhrest
2
Ну, 90k - это мой исходный размер ввода, и это делает мою машину настолько сложной, что мне приходится убивать этот grep. Затем я попытался разделить это на файлы размером 20 тыс., И это все еще работает ужасно ... Но вы правы, что мое описание противоречиво.
скаурус
2
Пожалуйста, уточните, не был ли сервер перегружен (делая некоторые другие ресурсоемкие задачи) во время grep.
АРУ
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_.
Stéphane Chazelas

Ответы: