데이터베이스 데이터를 디스크에 인덱싱하는 프로그램을 작성했는데 인덱스 속도가 적절한 지 확신 할 수 없습니다. 예를 들어 속도가 느리고 속도가 더 빠르거나 속도를 더 향상시킬 수 있는지 확실하지 않습니다.Lucene 인덱싱 성능
속도는 새 인덱스를 만들 때 약 2600KB의 인덱스 디렉토리 크기 인 시간당 약 15000 개의 문서입니다.
Lucene 6.0.0 및 Windows 8.1 64 비트 OS, 16GB RAM 및 Intel Core i7 8 코어 시스템을 사용하고 있습니다. 로컬 컴퓨터에서 인덱싱을하고 있는데 어떤 종류의 디스크가 있는지, Windows PC와 함께 제공되는 디스크인지는 확실하지 않습니다.
스프링 배치를 사용하여 INNER JOIN
데이터베이스 테이블 두 개를 가져오고 ItemReader
에서 행 매핑 된 객체를 가져오고이 객체에서 Document
을 준비합니다.
Lucene 6.0.0 updateDocument
은 기존 문서를 업데이트하는 것 외에도 문서가 존재하지 않는 경우 색인을 생성 할 문서를 추가하기 때문에 항상 방법 writer.updateDocument(contentDuplicateKeyTerm, doc);
이 아니라 addDocument(doc)
을 사용합니다.
내 프로그램을 비교할 벤치 마크를 모르겠다.
좋습니다.
편집 : 이제 시간당 약 1,800,000 문서의 성능을 얻을 수 있습니다. 각 Document
을 업데이트 한 후 문제가 IndexWriter.commit()
이었습니다. 이제는 일정한 간격으로 커밋하고 성능이 크게 향상되었습니다.
사람들이 원격으로 귀하의 성능 문제를 진단 할 것이라고 기대할 수는 없습니다. 쿼리, Lucene 및 디스크 출력에 성능을 분석하고 병목 현상을 식별합니다. 또한, 아직하지 않았다면'addDocument'와'updateDocument' 사이에 예상되는 성능 차이에 대한 정보를 얻으십시오. 중복을 삽입하지 않는다는 것을 알고 있다면'addDocument'를 사용하는 것이 좋습니다. –
네, 맞습니다. 나는 성능 문제가 있다고 말하고있는 것이 아니라 단지 ** 정상 속도 **로 알고 싶다. 내 질문을 편집했습니다. 내 코드에서 발견 한 한 가지 결함은 각 문서에 대한 커밋을 수행하는 것이 었습니다. 중복이 들어 오기를 시도 할 수 있기 때문에'updateDocument'를 사용하고 있습니다. (현재로서는 사전에 필터링 할 방법이 없습니다.) 인덱스에 중복을 원하지 않습니다. –
커밋은 _huge_ 차이를 만듭니다. 예상 속도는 "매우 높습니다."자체적으로 회전 디스크 처리량을 최대화해야합니다 ("평소의 속도"라고 생각하는 경우). –