2014-02-10 9 views
0

lucene 인덱스를 사용하는 일괄 삽입에서 노드와 관계 저장소가 매핑 된 메모리에 완전히 들어갈 수없는 많은 수의 노드와 관계가 주어지면 (따라서 lucene 인덱스 캐싱의 필요성) 어떻게 MMIO와 lucene간에 메모리를 나누어야합니까? 최적의 성능을 얻기 위해 인덱스 캐시? 문서를 읽었을 때, 이미 매핑 된 메모리 스키마 내에서 메모리를 나누는 방법에 대해 어느 정도 익숙합니다. MMIO와 lucene 캐시 사이의 전체 메모리 할당에 관심이 있습니다. 어떤 하드웨어가 사용 가능한지에 대한 프로토 타입을 개발하고 있으며 향후 리소스와 데이터 양이 결정되지 않았기 때문에 일반적인 용어로 답을 선호합니다 (나머지는이 대답이 더 유용 할 것으로 생각합니다). Neo4j 커뮤니티도) 그래서 이런 질문을 제기 할 수 있다면 그것은 좋은 것 :.BatchInserterIndex 캐시와 MMIO를 할당하는 방법은 무엇입니까?

을 감안할 때

rwN 노드와 기록되며 나중에 일괄 삽입에 읽을 수 있어야합니다 RWR의 관계, 노드 우승 woR 관계 만 기록됨, 기가 바이트 RAM (운영 체제에 필요한 항목 제외)

lucene 인덱스 캐시와 MMIO 사이의 G의 최적 분할은 무엇입니까?

자세한 내용이 필요한 경우 해당 사례를 제공 할 수 있습니다.

답변

0

이 모든 고려 사항 (복수) 노드의 수십억 관계

을 가져 오는 경우에만 관련이있는 당신 조회를 수행 할 때 보통은 색인 조회의 "핫 데이터 세트의 크기"에 따라 달라집니다.

기본적으로 모든 노드이지만 도메인을 더 잘 알고 있다면 필요한 캐시가 더 적어지는 일부 페이징을 고안 할 수 있습니다 (예 : 시작 및 끝 노드 조회 속성에 의한 관계 작성을 위해 입력 데이터를 미리 정렬하여)) 그러면 각 노드에 자주 액세스하는 동안 노드 데이터에 대해 움직이는 창이 나타납니다.

나는 보통 분 (시작, 끝)별로 정렬합니다.

일반적으로 rel-store 및 node store의 mmio 매핑을 위해 대부분의 RAM을 사용하려고합니다. 부동산 점포는 서면으로 작성되지만 나머지는 업데이트해야합니다.

인덱스 캐시 조회는 배후의 HashMap이므로 매우 낭비입니다. 내가 더 잘 작동한다는 것은 다른 접근 방식을 사용하는 것입니다. 멀티 패스 (multi-pass)

  • 사용 문자열 배열이 귀하의 모든 조회 특성, 종류의 그것과 노드 ID와 배열 인덱스 (Arrays.binarySearch)를 사용하여 다음 해당 배열의 조회
  • 다른 방법이 매우 효율적입니다을 넣어 는 원본 데이터에서 다중 패스를 사용하므로 원본의 일부로 rel에 필요한 노드 ID를 이미 만들었습니다. Xebia의 Friso 및 Kris는 hadoop based solution esp와 비슷한 작업을 수행했습니다. the monotonically increasing parallel id's
+0

고마워요! 이것은 많은 것을 정리했다. 나는 자신의 노드 ID를 생성하고로드 할 때 아무 것도 읽을 필요가없는 캐시가 적은 솔루션으로 전환했습니다. 거대한 시간 절약. –