2017-10-20 12 views
0

요구 사항 :데이터 구조가 예측 순서대로 분할되는 알고리즘

저는 Solr 인덱스를 빌드하는 프로그램에 기능을 추가하고 있습니다. 시스템은 멀티 스레드이므로 검색 항목은 매번 무작위 순서로 작성됩니다. 사용자가 하나의 큰 파일을 업로드하려고하면 서버에서 메모리가 부족할 수 있기 때문에 Solr 색인도 여러 파일로 분할해야합니다.

문제 : 안정적인 시스템을 유지하고 일을 더 쉽게 전체 수 있도록하기 위해

는, 결과 SOLR 인덱스 파일에 상관없이 그들이 처리하고 어떤 순서로 같은 수 없습니다해야 할 지표는 균형을해야합니다. 파일을 가로 질러 (또는 균형을 이룰 수있을만큼 충분히 가까이서), 최대량의 엔트리를 갖는다. 파일이 최대 항목 수를 초과하면 분할해야합니다. 이 파일들은 실행 중에도 업데이트되므로 항목이 추가, 제거 및 변경됩니다.

이 필요한 것 : 나는 이러한 요구 사항에 적용 할 수있는 알고리즘을 찾고 있어요

. 어떤 종류의 B-tree가 필요하다고 생각하지만이 특정 요구 사항에 적합한 B-tree 변형에 대해서는 알지 못합니다.

이러한 요구 사항에 도움이되는 알고리즘 또는 데이터 구조가 있습니까?

+0

"Solr 색인 파일이 동일해야합니까?" 처리 순서에 관계없이 파일이 동일해야한다는 것을 의미합니까? 또는 파일의 내용을 읽고 처리하면 동일한 결과를 만들어야합니까? –

+0

기본 Lucene 색인 파일은 추가 전용이므로 다른 순서로 항목을 추가하면 다른 파일이 생성됩니다 (내부 docid도 다를 수 있음). 자체 코덱을 만들어 콘텐츠를 직렬화 및 비 직렬화 할 수 있습니다. 이러한 요구 사항을 충족하면서 _ 확장 할 수 있습니까? Solr 외부에서 Lucene 색인을 직접 작성하고 있습니까? 어떻게 작성하고 있습니까? 디스크와 메모리에 구조를 생성 한 다음 그 구조를 Lucene에 순차적으로 직렬화 할 수 있습니까? 이 경우에 각 스레드에 2 진 트리가 있으면 디스크에 병합됩니다. – MatsLindh

+0

"Solr 색인 파일이 동일해야합니다."라는 말은 파일 자체가 동일해야한다는 의미입니다. 이러한 요구 사항은 프로그램의 신뢰성과 무결성을 입증하는 것입니다. 우리가 계획을 세우는 데 그리 멀기 때문에 Solr 인덱스가 어떻게 만들어지고 있는지 모르겠습니다. 그러나 이러한 파일은 JSON 형식으로 작성됩니다. 그러나 결과 파일이 일관성있는 한, 디스크와 메모리에 구조를 만들 수는 있습니다. – user489481

답변

0

내용에 따라 UUID를 사용하십시오. 파일을 분할하는 경우 UUID가 속하는 범위에 따라 각 항목을 양동이로 보냅니다. 항목을 가져 오는 순서에 관계없이 비교적 큰 크기의 양동이로 안정적으로 보내고 고유 색인은 결과가 똑같이 나온다.

자세한 내용은 https://wiki.apache.org/solr/UniqueKey을 참조하고 다른 유용한 팁은 https://wiki.apache.org/solr/LargeIndexes을 참조하십시오.