2009-10-17 7 views

답변

6

RAMDirectory는 빠르지 만 디스크에 기록되지 않습니다. 프로그램이 실행되는 동안에 만 존재하며 프로그램이 실행될 때마다 처음부터 만들어야합니다.

인덱스가 RAM에 편안하게 들어가기에 충분히 작고 자주 업데이트하지 않으면 디스크에 인덱스를 유지 한 다음 RAMDirectory(Directory dir) 생성자를 사용하여 RAMDirectory를 만들 수 있습니다. 쿼리는 디스크에있는 쿼리보다 빠르게 수행해야합니다. 일단 쿼리를로드하면 페널티를 지불해야합니다. 그러나 차이점을 측정하십시오. 인덱스가 RAMDirectory로 메모리에 맞을 수 있다면 디스크 캐시에도 맞을 수 있으므로 많은 차이가 없을 수도 있습니다.

+0

ur 입력에 감사드립니다. 얼마나 작습니까? "충분히 작습니까?" – user43498

+0

사용 가능한 실제 RAM보다 작다고 생각합니다. –

4

RAMDirectory의 사용을 프로파일 링해야합니다. 적어도 Linux에서는 RAMDirectory를 사용하는 것이 OS가 I/O를 버퍼링하는 방식 때문에 기본 FSDirectory를 사용하는 것보다 빠릅니다.

12

FSDirectory와 RAMDirectory를 비교합니다.

  • 인덱스의 크기는 1.4G
  • 를 CentOS, 5G 메모리

검색 1000 개 키워드, 평균/최소/최대 응답 시간 (밀리 초) 여기

    입니다
  • FSDirectory
    • 첫 번째 실행 : 351/7/2611
    • 초 실행 : 47/7/837
    • 번째 실행 (재시작 앱) 53/7/2343
  • RAMDirectory
    • 개봉 : 38/7/1133
    • 초 실행 : 34/7/189
    • 세 번째 실행 (다시 시작 응용 프로그램) : 38/7/959

RAMDirectory가 FSDirectory보다 빠르다는 것을 알 수 있습니다. 그러나 'os file cache warm up'이후에는 속도 차이가 별개가 아닙니다. RMADirectory의 단점은 무엇입니까? 내 테스트에서

  • 메모리를 더 많이 먹는 1.4G 파일은 메모리에로드하려면 약 2G가 필요합니다. FSDirectory는 700m 만 사용합니다. 그렇다면 그것은 full gc를위한 더 긴 시간을 의미합니다.
  • 특히 색인 파일이 큰 경우로드하는 데 시간이 더 걸립니다. 인덱스를 열 때 파일에서 메모리로 데이터를 복사해야합니다. 즉, 앱을 다시 시작하면 더 많은 시간 동안 요청이 차단됩니다.
  • 동시에 두 개의 인덱스를 유지하는 것은 그리 현실적이지 않습니다. 앱이 몇 시간마다 색인을 전환하기 때문입니다.우리는 새로운 인덱스가 워밍업되기를 원하지만 이전 인덱스는 여전히 같은 바람둥이에서 작동하고 있습니다.
관련 문제