Tại sao việc kết hợp chuỗi 1250 với các mẫu 90k lại chậm như vậy?


12

Chuỗi của tôi là đường dẫn tệp như s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; mô hình của tôi là khá đơn giản, tất cả như thế n7ce49B_.+.

Tôi đang chạy GNU grep 2.6.3dưới Debian 6.0.10 trên Dell DL360G7 máy chủ (tôi đề cập đến nó chỉ để cung cấp cho một cảm giác máy Biến này) với 15k ổ cứng, và lệnh này: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_filechỉ có thể không đầy đủ - giao dịch hoán đổi máy chủ quá nặng. Với mẫu 20k phải mất hơn 3 giờ.

Điều đó có vẻ không hợp lý với tôi.

Mỗi yêu cầu bình luận, có các tệp: đường dẫn tệp 20k mẫu

Người ta cũng có thể kiểm tra và điều chỉnh số lượng dòng và mẫu đầu vào bằng:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)

3
tiêu đề của bạn có 90k, mô tả có 20Kcác mẫu
RomanPerekhrest

2
Chà, 90k là kích thước đầu vào ban đầu của tôi và điều đó làm cho máy của tôi hoán đổi quá mạnh đến nỗi tôi phải giết grep đó. Sau đó, tôi đã cố gắng chia tệp này thành 20k và nó vẫn hoạt động khủng khiếp ... Nhưng bạn nói đúng rằng mô tả của tôi không nhất quán.
skaurus

2
Vui lòng làm rõ liệu máy chủ có thể bị quá tải hay không (thực hiện một số tác vụ đói tài nguyên khác) trong quá trình grep.
agc

2
Người ta có thể sinh sản với xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000). Có vẻ như thời gian được dành để biên dịch các biểu thức chính và phân bổ rất nhiều bộ nhớ. Với -Fthay vì -E, nó ngay lập tức.
Stéphane Chazelas

2
Đối với vấn đề đó, không n7ce49B_.+tương đương vớin7ce49B_.
Stéphane Chazelas

Câu trả lời:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.