90k 패턴에 대해 1250 개의 문자열을 일치시키는 것이 왜 그렇게 느립니까?


12

내 문자열은 다음과 같은 파일 경로입니다 s/14/11/13/15/n7ce49B_235_25ed2d70.jpg. 내 패턴은 모두 매우 간단한 패턴 n7ce49B_.+입니다.

15k HDD의 Dell DL360G7 서버 GNU grep 2.6.3에서 Debian 6.0.10 으로 실행 중 입니다 (이 기계 성능을 설명하기 위해 언급했습니다).이 명령 : 완료 할 수 없습니다-서버 교환이 너무 심합니다. 20k 패턴으로 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는 원래 입력 크기이며 그로 인해 기계 스왑이 너무 어려워 그렙을 죽여야합니다. 그런 다음이 파일을 20k 파일로 분할하려고 시도했지만 여전히 끔찍하게 작동합니다 ...하지만 당신은 내 설명이 일치하지 않는다고 생각합니다.
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, 그것은 순간입니다.
Stéphane Chazelas 2016 년

2
그 문제를 들어,하지 않는 것이 n7ce49B_.+에 해당합니다n7ce49B_.
스테판 Chazelas가

답변:


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.