다음과 같은 문제가 있습니다. 2 백만 개 이상의 레코드가 포함 된 데이터베이스가 있습니다. 각 레코드에는 문자열 필드 X가 있으며 필드 X에 특정 문자열이 포함 된 레코드 목록을 표시하려고합니다. 각 레코드의 크기는 약 500 바이트입니다.
좀 더 구체적으로 : 응용 프로그램의 GUI에는 문자열을 입력 할 수있는 텍스트 필드가 있습니다. 텍스트 필드 위에 텍스트 필드의 문자열과 일치하는 (첫 번째 N, 예를 들어 100) 레코드를 표시하는 테이블이 있습니다. 텍스트 필드에 문자를 입력하거나 삭제할 때 테이블 내용을 즉시 업데이트해야합니다.
적절한 인덱스 구조 및 / 또는 캐싱을 사용 하여이 작업을 수행하는 효율적인 방법이 있는지 궁금합니다. 위에서 설명한 것처럼 쿼리와 일치하는 첫 번째 N 항목 만 표시하고 싶습니다. 따라서 N의 크기가 작 으면 데이터베이스에서 일치하는 항목을로드하는 데 큰 문제가되지 않습니다. 또한 주 메모리에 항목을 캐시하면 검색 속도가 빨라질 수 있습니다.
주요 문제는 패턴 문자열을 고려하여 일치하는 항목을 빨리 찾는 방법입니다. 일부 DBMS 기능에 의존 할 수 있습니까? 아니면 인 메모리 인덱스를 직접 만들어야합니까? 어떤 아이디어?
편집하다
첫 번째 실험을 진행했습니다. 레코드를 다른 텍스트 파일로 분할하고 (파일 당 최대 200 개의 레코드) 파일을 다른 디렉토리에 넣었습니다 (한 데이터 필드의 내용을 사용하여 디렉토리 트리를 결정했습니다). 약 40000 개의 디렉토리에 약 50000 개의 파일이 있습니다. 그런 다음 Lucene을 실행하여 파일을 색인화했습니다. Lucene 데모 프로그램으로 문자열을 검색하는 것은 매우 빠릅니다. 분할 및 인덱싱에는 몇 분이 걸렸습니다. 쿼리하려는 정적 데이터 세트이기 때문에 이것은 전적으로 허용됩니다.
다음 단계는 Lucene을 기본 프로그램에 통합하고 Lucene이 리턴 한 적중을 사용하여 관련 레코드를 기본 메모리에로드하는 것입니다.