2008-10-02 13 views
8

Đây là vấn đề tôi gặp phải, tôi có một bộ nhật ký có thể phát triển khá nhanh. Chúng được chia thành các tệp riêng lẻ mỗi ngày và các tệp có thể dễ dàng phát triển đến kích thước biểu diễn. Để giúp giảm kích thước, các mục nhập cũ hơn 30 ngày trở lên sẽ bị xóa.Tìm kiếm Văn bản Nhanh Qua Nhật ký

Vấn đề là khi tôi muốn tìm kiếm các tệp này cho một chuỗi nhất định. Ngay bây giờ, một tìm kiếm Boyer-Moore là chậm chạp. Tôi biết rằng các ứng dụng như dtSearch có thể cung cấp một tìm kiếm thực sự nhanh chóng bằng cách sử dụng chỉ mục, nhưng tôi không thực sự chắc chắn làm thế nào để thực hiện mà không chiếm hai lần không gian một đăng nhập đã mất.

Có tài nguyên nào tôi có thể xem có thể trợ giúp không? Tôi thực sự đang tìm kiếm một thuật toán chuẩn sẽ giải thích những gì tôi nên làm để xây dựng một chỉ mục và sử dụng nó để tìm kiếm.

Chỉnh sửa:
Grep sẽ không hoạt động vì tìm kiếm này cần được tích hợp vào một ứng dụng đa nền tảng. Không có cách nào tôi sẽ có thể xoay bao gồm bất kỳ chương trình bên ngoài vào nó.

Cách hoạt động là có giao diện người dùng web có trình duyệt nhật ký. Điều này nói chuyện với một phụ trợ máy chủ web C++ tùy chỉnh. Máy chủ này cần tìm kiếm nhật ký trong một khoảng thời gian hợp lý. Hiện tại, tìm kiếm thông qua một vài hợp đồng biểu diễn có tuổi.

Chỉnh sửa 2: Một số đề xuất này rất tuyệt, nhưng tôi phải nhắc lại rằng tôi không thể tích hợp một ứng dụng khác, đó là một phần của hợp đồng. Nhưng để trả lời một số câu hỏi, dữ liệu trong nhật ký thay đổi từ thư nhận được ở định dạng cụ thể chăm sóc sức khỏe hoặc thông báo liên quan đến các thông tin này. Tôi đang tìm kiếm để dựa vào một chỉ mục bởi vì trong khi nó có thể mất đến một phút để xây dựng lại chỉ mục, tìm kiếm hiện đang mất một thời gian rất dài (tôi đã nhìn thấy nó mất đến 2,5 phút). Ngoài ra, rất nhiều dữ liệu bị loại bỏ trước khi ghi lại. Trừ khi một số tùy chọn ghi nhật ký gỡ lỗi được bật, hơn một nửa số thông điệp tường trình bị bỏ qua.

Tìm kiếm cơ bản như sau: Người dùng trên biểu mẫu web được hiển thị danh sách các thư gần đây nhất (được phát trực tiếp từ đĩa khi họ cuộn, yay cho ajax), thông thường, họ sẽ muốn tìm kiếm thư với một số thông tin trong đó, có thể là một id bệnh nhân, hoặc một số chuỗi họ đã gửi, và vì vậy họ có thể nhập chuỗi vào tìm kiếm. Tìm kiếm được gửi không đồng bộ và máy chủ web tùy chỉnh tuyến tính tìm kiếm thông qua nhật ký 1MB mỗi lần cho một số kết quả. Quá trình này có thể mất rất nhiều thời gian khi nhật ký trở nên lớn. Và đó là những gì tôi đang cố gắng tối ưu hóa.

+0

dùng thử với grep dưới dạng công cụ bên ngoài, nếu đủ nhanh, bạn có thể lấy mã nguồn grep grep và tích hợp trực tiếp vào ứng dụng của bạn. – gbjbaanb

+0

Tôi muốn, nhưng đó là một vấn đề pháp lý nếu tôi bao gồm nó, tôi đã hỏi về đi xuống con đường đó. – ReaperUnreal

Trả lời

2

Kiểm tra các thuật toán mà Lucene sử dụng để thực hiện. Tuy nhiên, chúng không có khả năng rất đơn giản. Tôi đã phải nghiên cứu một số thuật toán này một lần và một số thuật toán rất phức tạp.

Nếu bạn có thể xác định "từ" trong văn bản bạn muốn lập chỉ mục, chỉ cần tạo bảng băm lớn của các từ ánh xạ giá trị băm của từ đến các lần xuất hiện trong mỗi tệp. Nếu người dùng lặp lại cùng một tìm kiếm thường xuyên, hãy lưu vào bộ nhớ cache kết quả tìm kiếm. Khi tìm kiếm được thực hiện, bạn có thể kiểm tra từng vị trí để xác nhận cụm từ tìm kiếm nằm ở đó, thay vì chỉ một từ có hàm băm phù hợp.

Ngoài ra, ai thực sự quan tâm nếu chỉ mục lớn hơn chính tệp? Nếu hệ thống của bạn thực sự to lớn, với rất nhiều hoạt động, thì có một vài chục hợp đồng biểu diễn cho một chỉ số kết thúc của thế giới?

5

grep thường hoạt động khá tốt đối với tôi với nhật ký lớn (đôi khi 12G +). Bạn cũng có thể tìm thấy phiên bản cho windows here.

+0

Phải. Đó cũng là suy nghĩ đầu tiên của tôi, nhưng OP thực sự cần cung cấp thêm một chút ngữ cảnh để đánh giá mức độ hữu ích của đề xuất này. – dmckee

0

Thông tin chi tiết về loại tìm kiếm bạn đang thực hiện chắc chắn có thể hữu ích. Tại sao, cụ thể là bạn muốn dựa vào một chỉ mục, vì bạn sẽ phải xây dựng lại nó mỗi ngày khi các bản ghi cuộn qua? Loại thông tin nào có trong các nhật ký này? Một số có thể bị loại bỏ trước khi nó được ghi lại không?

Các tìm kiếm này đang diễn ra trong bao lâu?

-2

Splunk là rất tốt cho việc tìm kiếm thông qua rất nhiều bản ghi.Có thể quá mức cần thiết cho mục đích của bạn. Bạn trả tiền theo số lượng dữ liệu (kích thước của các bản ghi) mà bạn muốn xử lý. Tôi chắc rằng họ có API nên bạn không phải sử dụng giao diện người dùng của mình nếu bạn không muốn.

0

Bạn có thể muốn kiểm tra nguồn cho BSD grep. Bạn có thể không thể dựa vào grep ở đó cho bạn, nhưng không có gì nói rằng bạn không thể tạo lại chức năng tương tự, đúng không?