2008-10-02 2 views
8

여기 제가 가지고있는 문제가 있습니다. 상당히 빠르게 성장할 수있는 로그 세트가 있습니다. 파일은 매일 개별 파일로 나뉘며 파일은 쉽게 크기만큼 커질 수 있습니다. 크기를 줄이기 위해 30 일 또는 그 이상의 항목은 지워집니다.로그를 통한 고속 텍스트 검색

문제는 이러한 파일을 특정 문자열로 검색하려고 할 때입니다. 지금 Boyer-Moore 검색은 천천히 느립니다. dtSearch와 같은 응용 프로그램은 색인 생성을 사용하여 매우 빠른 검색을 제공 할 수 있지만 실제로 로그가 차지하는 공간을 두 배로 차지하지 않고 구현하는 방법을 잘 모르겠습니다.

도움이 될만한 자료가 있습니까? 나는 인덱스를 만들고 검색에 사용해야하는 것을 설명하는 표준 알고리즘을 찾고 있습니다.

편집 :
이 검색은 교차 플랫폼 응용 프로그램에 통합되어야하므로 Grep는 작동하지 않습니다. 외부 프로그램을 포함하여 내가 스윙 할 수있는 방법은 없습니다.

작동 방식은 로그 브라우저가있는 웹 프런트 엔드입니다. 이것은 커스텀 C++ 웹 서버 백엔드와 대화합니다. 이 서버는 적당한 시간 내에 로그를 검색해야합니다. 현재 여러 개의 로그를 검색하는 데는 시간이 오래 걸립니다.

편집 2 : 이러한 제안 중 일부는 훌륭하지만 다른 애플리케이션을 통합 할 수 없다는 점을 다시 한 번 강조해야합니다. 이는 계약의 일부입니다. 그러나 몇 가지 질문에 대답하기 위해 로그의 데이터는 수신 된 메시지를 의료 관련 형식 또는 메시지와 관련이 있습니다. 색인을 다시 작성하는 데 최대 1 분이 걸릴 수 있지만 검색은 현재 매우 오랜 시간이 걸립니다 (2.5 분 정도 걸립니다). 또한 많은 데이터가 기록되기 전에 폐기됩니다. 일부 디버그 로깅 옵션이 설정되어 있지 않으면 로그 메시지의 절반 이상이 무시됩니다.

검색은 기본적으로 다음과 같이 진행됩니다. 웹 양식의 사용자는 가장 최근의 메시지 (스크롤 할 때 디스크에서 스트리밍되고 아약스 인 경우 스트리밍 됨)의 목록이 표시됩니다. 일반적으로 메시지를 검색하려고합니다 그 안에 어떤 정보, 어쩌면 환자 ID 나 그들이 보낸 어떤 문자열을 가지고, 그래서 그들은 문자열을 검색에 입력 할 수 있습니다. 검색은 비동기 적으로 전송되고 사용자 정의 웹 서버는 로그를 통해 한 번에 1MB를 선형 검색하여 일부 결과를 찾습니다. 이 프로세스는 로그가 커질 때 매우 오랜 시간이 걸릴 수 있습니다. 그리고 그것은 제가 최적화하려고하는 것입니다.

+0

gnu grep을 외부 도구로 사용해보십시오. GNU grep 소스 코드를 충분히 받아서 앱에 직접 통합 할 수 있다면 충분합니다. – gbjbaanb

+0

나는 그것을 포함 시키면 법적 문제가된다. 나는 그 길로가는 것에 대해 질문했다. – ReaperUnreal

답변

2

Lucene이 그 일을하기 위해 사용하는 알고리즘을 확인하십시오. 그들은 매우 단순 할 것 같지는 않습니다. 한 번에 이러한 알고리즘 중 일부를 공부해야했고 그 중 일부는 매우 정교했습니다.

색인을 생성하려는 텍스트에서 "단어"를 식별 할 수있는 경우 단어의 해시를 각 파일의 항목으로 매핑하는 단어의 큰 해시 테이블을 작성하기 만하면됩니다. 사용자가 동일한 검색을 자주 반복하면 검색 결과를 캐시하십시오. 검색이 완료되면 일치하는 해시가있는 단어가 아닌 검색어가 해당 단어에 속하는지 확인하기 위해 각 위치를 확인할 수 있습니다.

또한 인덱스가 파일 자체보다 큰 경우 누가 신경 써야합니까? 당신의 시스템이 정말 크고, 많은 활동을하고 있다면, 세상 끝날 무렵에는 수십 번의 공연이있을 것입니다.

5

grep은 대개 큰 로그 (때로는 12G +)에서 나를 잘 처리합니다. Windows here의 버전도 찾을 수 있습니다.

+0

오른쪽. 그것은 저의 첫 번째 생각이기도하지만, OP는이 제안이 얼마나 유용 할지를 평가할 수있는 약간의 컨텍스트를 제공해야합니다. – dmckee

0

검색 유형에 대한 자세한 내용은 확실히 도움이 될 것입니다. 왜, 특히 로그를 롤오버 할 때 인덱스를 다시 작성해야하기 때문에 인덱스에 의존하고 싶습니까? 이 로그에는 어떤 종류의 정보가 있습니까? 그것이 기록되기도 전에 폐기 될 수 있습니까?

검색이 얼마나 오래 걸리나요?

-2

Splunk하는 로그의 많은 통해 검색에 좋은 곳입니다.너의 목적을 위해 과잉일지도 모른다. 처리하려는 데이터의 양 (로그 크기)에 따라 지불합니다. 나는 그들이 API를 가지고 있기 때문에 당신이 원하지 않으면 프론트 엔드를 사용할 필요가 없다고 확신한다.

0

BSD grep의 출처를 확인하십시오. grep에 의존 할 수는 없지만 비슷한 기능을 다시 만들 수 없다고 말하는 것은 없습니다.