2013-02-06 5 views
2

내 neo4j 데이터베이스의 인덱스에서 데이터를 가져 오는 중입니다. 실행 시간에 문제가 있습니다. 나는 단순히 결과 값을 계산하는 쿼리를 시도하고있다. 내 프로덕션 데이터베이스에서 나는 더 복잡한 계산을하고 있습니다. 어쨌든, 내 쿼리 (캐시가 따뜻한 경우, 2.5-3 초 두 번째) 카운트가 약 20 초에 278,418을 반환neo4j 느린 루센 인덱스 쿼리

START person = node:user_index('muncipalityCode:(1278 OR 1285 OR 1283 OR 1293 OR 1284 OR 1261 OR 1282 OR 1262 OR 1281 OR 1280 OR 1273) ') 
return count(person) 

이 같이 보입니다. 물론, 꽤 큰 데이터 세트를 반환하고 있습니다. 그러나, 그것은 거대하지 않습니다.

이 병목 현상이나 일부 구성 설정을 줄일 수 있습니까? 시작시 캐시 워밍업을 시도했지만 프로덕션 서버의 RAM에 모든 데이터를 넣을 수는 없으므로 백업 서버가 16GB RAM입니다.

내 데이터베이스에는 다음과 같은 특성이 있습니다. 10 329 245 노드 97 923 564 특성 50 개 697 532 관계

+0

이 코드를 Java API로 변환하고 그것이 인덱스인지 카운트인지 알 수 있습니까? – Nicholas

+0

나는 OR 조건이 문제가 될 수 있다고 생각한다. (적어도 OR 조건이있는 경우 때때로 인덱스가 생략되는 SQL에있다.) 쿼리를 이와 같이 별도의 START 단계로 나누면 도움이 될까요? 'START person1 = node : user_index ('muncipalityCode : 1278), person2 = node : user_index ('muncipalityCode : 1285), person3 = .... RETURN count (person1) + count (person2) + count (person3) ... ' – ulkas

+0

얼마나 많은 사람들이 반환됩니까? 우편 번호를 인덱싱 된 노드로 모델링하고 사람들을 그 노드에 연결할 수 있습니까? 그런 다음 lucene 쿼리는 15 개의 항목 만 반환하면됩니다. Lucene은 결과를 유지하므로 메모리 사용 및 GC와 관련 될 수도 있습니다. –

답변

2

나는 문제가 인덱스 또는 다른 코드의 여부를 확인하기 위해 Luke을 사용합니다. 해당 Luke 쿼리가 빠르면 문제는 다른 곳에 있습니다.