2013-07-31 1 views
5

인덱스 파일이 FSdirectory로 하드 디스크에 있는데 크기는 약 2GB입니다. 더 나은 검색 속도를 얻기 위해 RAM에로드하고 싶습니다. 뒤에 코드를 사용합니다 :Lucene에서 FSdirectory 인덱스 파일을 RAMdirectory로로드하는 방법은 무엇입니까?

Directory dic=new RAMDirectory(FSDirectory.open(new File("file path")), IOContext.DEFAULT); 

하지만 작동 여부는 확실하지 않습니다. 그것은 작동 여부를 아는 사람 있습니까? 이보다 나은 다른 방법은 없을까요?

나는 어떤 제안이라도 기뻐할 것입니다. 감사합니다.

+0

직접적으로 로딩하는 것이 더 좋습니다 (RAMDir을 사용하지 마십시오). os 파일 캐시는 mem에 인덱스를로드합니다. 이에 따라 jvm Xmx를 설치하는 것을 잊지 마십시오. os에 최소한 2G의 여유 공간을 두십시오. (예 : 4G 시스템에서 Xmx2G 사용). – nomoa

+0

@nomoa 직접로드하는 것이 무엇을 의미하는지 이해하지 못했습니다. 그것을하는 방법? 바람둥이가 운영하는 웹 응용 프로그램에서 사용하고 싶습니다. – anony

+0

RAMDirectory를 사용하면 검색 속도가 향상되지 않는다는 것을 의미하는 java 문서를 살펴보십시오. 경고 :이 클래스는 거대한 인덱스에서 작동하지 않습니다. jvm params와 os params (Linux에서 swappiness)를 조정하면 검색 속도가 향상됩니다. lucene perf FAQ를 보셔야합니다. – nomoa

답변

2

네, 그렇다면 RAMDirectory를 구성 할 수는 있지만 귀하의 경우에는 매우 낙심하고 있습니다. RAMDirectory는 대형 데이터 세트 (100MB 이상)와 함께 사용하도록 설계되지 않았습니다. 귀중한 JAVA 힙 공간을 구축하고 소비하는 데는 GC 집약적입니다.

당신이 반환 한 문제가있을 경우 OS가 메모리에 인덱스의 일부를 캐시 할 필요가 하강 검색 속도를 얻을 것을 잊지 마세요

this lucene FAQ에 VII로부터 모든 지침을 준수하는지 확인하시기 바랍니다. 그렇게하기 위해서는 OS에 사용 가능한 일부 무료 mem을 허용해야합니다. 16Gb의 물리적 RAM과 8GB의 색인이있는 경우 jvm Xmx를 8g로 구성해야합니다. Mem을 검사하는 멋진 리눅스 도구는 htop이며, 프로세스에 사용 된 RAM (힙 공간)과 RAM을 filecache로 사용하여 노란색으로 인쇄합니다 (색인 데이터).

일부 개발자는 응용 프로그램 시작시 warm 쿼리를 수행하여 os filecache에 의해 색인이로드되는 동안 첫 번째 사용자가 몇 초간 멈추지 않도록합니다.

그렇다면 여전히 더 나은 성능을 얻을 수 있다고 생각하면 RAMfs로 몇 가지 트릭을 시도 할 수 있습니다. 하지만 MMapDirectory가있는 잘 조율 된 OS 및 JVM보다 더 좋은 퍼포먼스를 얻을 수 있을지는 의문입니다.

관련 문제