문제

여기에 내가 가진 문제가 있습니다. 상당히 빨리 성장할 수있는 일련의 로그가 있습니다. 그들은 매일 개별 파일로 나뉘며 파일은 크기가 크기로 쉽게 성장할 수 있습니다. 크기를 낮추기 위해 30 일 이상의 항목이 제거됩니다.

문제는이 파일을 특정 문자열에 대해 검색하고 싶을 때입니다. 지금 당장 보이어-모어 검색이 느려집니다. DTSearch와 같은 애플리케이션은 인덱싱을 사용하여 실제로 빠른 검색을 제공 할 수 있다는 것을 알고 있지만 로그가 이미 취해집니다.

도움이 될 수있는 자료가 있습니까? 나는 실제로 인덱스를 구축하고 검색하기 위해 무엇을 해야하는지 설명하는 표준 알고리즘을 찾고 있습니다.

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

작동 방식은 로그 브라우저가있는 웹 프론트 엔드가 있다는 것입니다. 이것은 사용자 정의 C ++ 웹 서버 백엔드와 대화합니다. 이 서버는 합리적인 시간 내에 로그를 검색해야합니다. 현재 여러 공연의 로그를 검색하는 데 오랜 세월이 걸립니다.

편집 2 : 이러한 제안 중 일부는 훌륭하지만 다른 응용 프로그램을 통합 할 수 없다는 것을 반복해야합니다. 계약의 일부입니다. 그러나 일부 질문에 답하기 위해 로그의 데이터는 의료 특정 형식의 메시지 또는 이와 관련된 메시지와 다릅니다. 인덱스를 재건하는 데 최대 1 분이 걸릴 수 있지만 현재 검색에는 매우 오랜 시간이 걸리기 때문에 색인에 의존하고자합니다 (최대 2.5 분이 걸리는 것을 보았습니다). 또한, 많은 데이터가 녹음하기 전에 버려집니다. 일부 디버그 로깅 옵션이 켜지지 않으면 로그 메시지의 절반 이상이 무시됩니다.

검색은 기본적으로 다음과 같습니다. 웹 양식의 사용자에게는 가장 최근의 메시지 목록이 표시됩니다 (스크롤 할 때 디스크에서 스트리밍 된 디스크, ajax의 yay). 일반적으로 일부 정보가 포함 된 메시지를 검색하고 싶습니다. 그것은 환자 ID 또는 그들이 보낸 일부 문자열이므로 검색에 문자열을 입력 할 수 있습니다. 검색이 비스듬히 전송되고 사용자 정의 웹 서버가 일부 결과를 위해 한 번에 로그 1MB를 통해 선형 검색을합니다. 이 프로세스는 로그가 커질 때 매우 오래 걸릴 수 있습니다. 그리고 그것은 내가 최적화하려는 것입니다.

도움이 되었습니까?

해결책

루센이 그 일을하기 위해 사용하는 알고리즘을 확인하십시오. 그래도 그들은 매우 간단하지 않을 것입니다. 나는이 알고리즘 중 일부를 옛날 옛적에 연구해야했고, 그 중 일부는 매우 정교합니다.

색인하려는 텍스트에서 "단어"를 식별 할 수 있다면, 단어의 해시를 각 파일의 발생에 맵핑하는 큰 해시 테이블 만 작성하십시오. 사용자가 동일한 검색을 자주 반복하면 검색 결과를 캐시하십시오. 검색이 완료되면 각 위치를 확인하여 일치하는 해시와 단어가 아닌 검색어가 떨어질 수 있습니다.

또한 인덱스가 파일 자체보다 큰 경우 누가 신경 쓰나요? 당신의 시스템이 실제로 많은 활동 으로이 크고, 세계의 종말에 대한 수십 개의 공연입니까?

다른 팁

grep 보통 큰 로그 (때로는 12g+)로 나에게 잘 작동합니다. Windows 용 버전을 찾을 수 있습니다 여기 또한.

일부 유형의 인덱싱 검색 엔진을 애플리케이션에 통합하고 싶을 것입니다. 거기에 수십 명이 있습니다. 루센 매우 인기있는 것 같습니다. 더 많은 제안을 보려면이 두 가지 질문을 확인하십시오.

사용자 정의 웹 앱과 통합하기위한 최고의 텍스트 검색 엔진?

웹 사이트에서 검색 기능을 구현하려면 어떻게해야합니까?

수행하는 검색의 종류에 대한 자세한 내용은 확실히 도움이 될 수 있습니다. 특히 로그가 롤오버 될 때 매일 재건해야하기 때문에 왜 인덱스에 의존하고 싶습니까? 이 로그에 어떤 종류의 정보가 있습니까? 그 중 일부는 녹음하기 전에 버릴 수 있습니까?

이 검색은 지금 얼마나 걸립니까?

BSD 소스를 확인하고 싶을 수도 있습니다. grep. 당신은 당신을 위해 거기에있는 Grep에 의존하지 않을 수도 있지만, 비슷한 기능을 재현 할 수 없다고 말하는 것은 없습니까?

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top