여기 제가 가지고있는 문제가 있습니다. 상당히 빠르게 성장할 수있는 로그 세트가 있습니다. 파일은 매일 개별 파일로 나뉘며 파일은 쉽게 크기만큼 커질 수 있습니다. 크기를 줄이기 위해 30 일 또는 그 이상의 항목은 지워집니다.로그를 통한 고속 텍스트 검색
문제는 이러한 파일을 특정 문자열로 검색하려고 할 때입니다. 지금 Boyer-Moore 검색은 천천히 느립니다. dtSearch와 같은 응용 프로그램은 색인 생성을 사용하여 매우 빠른 검색을 제공 할 수 있지만 실제로 로그가 차지하는 공간을 두 배로 차지하지 않고 구현하는 방법을 잘 모르겠습니다.
도움이 될만한 자료가 있습니까? 나는 인덱스를 만들고 검색에 사용해야하는 것을 설명하는 표준 알고리즘을 찾고 있습니다.
편집 :
이 검색은 교차 플랫폼 응용 프로그램에 통합되어야하므로 Grep는 작동하지 않습니다. 외부 프로그램을 포함하여 내가 스윙 할 수있는 방법은 없습니다.
작동 방식은 로그 브라우저가있는 웹 프런트 엔드입니다. 이것은 커스텀 C++ 웹 서버 백엔드와 대화합니다. 이 서버는 적당한 시간 내에 로그를 검색해야합니다. 현재 여러 개의 로그를 검색하는 데는 시간이 오래 걸립니다.
편집 2 : 이러한 제안 중 일부는 훌륭하지만 다른 애플리케이션을 통합 할 수 없다는 점을 다시 한 번 강조해야합니다. 이는 계약의 일부입니다. 그러나 몇 가지 질문에 대답하기 위해 로그의 데이터는 수신 된 메시지를 의료 관련 형식 또는 메시지와 관련이 있습니다. 색인을 다시 작성하는 데 최대 1 분이 걸릴 수 있지만 검색은 현재 매우 오랜 시간이 걸립니다 (2.5 분 정도 걸립니다). 또한 많은 데이터가 기록되기 전에 폐기됩니다. 일부 디버그 로깅 옵션이 설정되어 있지 않으면 로그 메시지의 절반 이상이 무시됩니다.
검색은 기본적으로 다음과 같이 진행됩니다. 웹 양식의 사용자는 가장 최근의 메시지 (스크롤 할 때 디스크에서 스트리밍되고 아약스 인 경우 스트리밍 됨)의 목록이 표시됩니다. 일반적으로 메시지를 검색하려고합니다 그 안에 어떤 정보, 어쩌면 환자 ID 나 그들이 보낸 어떤 문자열을 가지고, 그래서 그들은 문자열을 검색에 입력 할 수 있습니다. 검색은 비동기 적으로 전송되고 사용자 정의 웹 서버는 로그를 통해 한 번에 1MB를 선형 검색하여 일부 결과를 찾습니다. 이 프로세스는 로그가 커질 때 매우 오랜 시간이 걸릴 수 있습니다. 그리고 그것은 제가 최적화하려고하는 것입니다.
gnu grep을 외부 도구로 사용해보십시오. GNU grep 소스 코드를 충분히 받아서 앱에 직접 통합 할 수 있다면 충분합니다. – gbjbaanb
나는 그것을 포함 시키면 법적 문제가된다. 나는 그 길로가는 것에 대해 질문했다. – ReaperUnreal