2012-01-26 6 views
7

Windows 클러스터에서 실행되는 응용 프로그램에 대해 Lucene.NET을 실행하는 데 관심이 있습니다. 검색 문제 자체는 적지 만 상태 비 저장/클러스터 문제는 여전히 처리해야합니다.Lucene.NET 클러스터링을위한 옵션?

SOLR이 내 시나리오 (및 기타)를 처리하지만 서블릿 컨테이너 (및 Java)를 요구할 때 일부 문제가 있음을 이해합니다. Lucene.NET 기반 접근 방식의 복잡성에 따라 여전히 바이알 옵션이 될 수 있습니다. 모든 노드

  • 가 공유 스토리지에 지속

    , 일반 :

    내 질문은 이제 여러 호스트에서 실행의 문제를 처리하기위한 내가 가진 어떤 옵션입니까? Lucene.NET은 동시성을 투명하게 처리합니까? 서버가 캐싱에 RAM을 사용할 것인가? 그렇다면 Lucene.NET은 업데이트 된 파일을 기반으로 무효화를 투명하게 처리합니까?

  • 복제? 각 서버에는 필요한 모든 사본이 있습니다. 모든 업데이트에서 모든 서버는 새로운 복제본을 얻습니다 (또는 비교적 간단하다면 diff). 이를위한 기존 도구 또는 최대 처리 도구는 무엇입니까?

  • 워크로드 파티셔닝/샤딩? 각 서버는 읽기 및 갱신을 위해 자체 데이터 만 처리합니다. 이것을 처리하기위한 도구, 부분 결과 합치기 등?

  • 기타 옵션 초기 조사에서 놓친 것일 수 있습니까?

로컬 버전을 실험 할 때 Lucene 디렉토리는 몇 백 메가와 비슷했습니다. 장기적으로 아마 1 ~ 5GB를 볼 수 있습니다. 업데이트 빈도가 어려운 경우이를 상당히 유연하게 제어 할 수 있습니다. 동시 읽기/검색로드는 매우 온건 한 것으로 예상됩니다.

+1

직접적인 대답은 아니지만 elasticsearch (http://www.elasticsearch.org/)를 살펴보고 대부분의 요구 사항을 매우 쉽게 처리합니다. – Mikos

+0

클러스터 멤버간에 데이터를 동기화하기위한 요구 사항은 무엇입니까? 우리는 Lucene.NET의 상당히 대규모 클러스터 배포 중간에 있으며 귀하의 상황을 더 잘 이해한다면 약간의 지침을 제공 할 수 있습니다. –

답변

0

여러 서버에서 lucene.net을 사용할 수 있지만 인덱싱 서버를 구현해야합니다.

모든 변경 사항은 대기열에 있어야하며 매번 보류중인 문서의 색인을 생성해야합니다. 또한 x 항목이 대기열에 있으면 즉시 색인을 생성해야합니다 (x는 병합 문서 설정에 따라 다르지만이 값은 25,000입니다).

위의 추론은 많은 작은 파일이 생성되어 초과 작업으로 인해 성능이 저하되므로 색인을 약간 변경하지 않아야합니다. Uou는 2 개의 인덱싱 서버를 실행할 수 있지만 인덱스를 잠그기 때문에 한 번에 1 개만 인덱싱 할 수 있습니다.이 작업을 수행하는 유일한 이유는 처음 작업이 중단 될 경우 장애 조치 (failover)가 필요하기 때문입니다.

저는 3 천만 개의 레코드로 15Gb의 인덱스를 사용했습니다. 내가 가진 시나리오는 하늘 아래였습니다. 내용 각 인덱스를 들고 제공 20 웹 역할 - 인덱스

  • 1 개 작업자 역할은

  • 이 변경됩니다.

변경 사항은 15 분마다 푸시되고 색인은 25,000 개의 변경 사항으로 병합되고 25,000 개의 문서가 포함 된 각 색인이 병합됩니다. 각 웹 서버는 BLOB 저장소에 15 분마다 변경 사항을 확인하고 인덱스 판독기를 잠급니다.이 판독기는 변경 사항이 다운로드되면 무효화됩니다. 파일 당 최대 문서 수는 기본적으로 많은 변경 사항을 다운로드 한 웹 서버를 중지하는 것입니다.

Lucene.AzureDirectory를 사용하여 시작했지만 blob 저장소에서 변경된 blob을 감지 할 때 신뢰할 수 없으므로 blob을 반복하고 로컬에서 비교하고 필요에 따라 다운로드했습니다.

이제 다시 이와 비슷한 것을 구현할 수 있습니까? 대답은 큰 부정입니다. 나는 당신이 바퀴를 다시 발명 할 때 elasticsearch 또는 solr를 대신 사용할 것입니다.