2013-07-21 3 views
0

노드가 50 만 개가있어서 10-15 초가 소요됩니다. 어떻게 최적화 할 수 있습니까?neo4j cypher 쿼리 최적화

start n = score DESC Limit 5; n (n.score) RETURN n, n.score ORDER BY;

주위를 둘러 보지 않고 WHERE 절이 느려지는 느낌이 들지만 노드의 속성에서 MATCH를 어떻게 사용할 수 있는지 잘 모르겠습니다.

답변

0

노드 (*)를 사용하면 속성의 존재를 확인하고 결과를 정렬하기 위해 노드 500,000 개 전체 그래프를 효과적으로 만질 수 있습니다. 얼마나 많은 행을 되 찾으나요? 주문 조항을 삭제하면 더 빨리 처리 할 수 ​​있습니까?

그리고 당신의 사용 사례는 무엇입니까? 글로벌 그래프 작업을 피하기 위해이를 다르게 모델링 할 수 있는지 궁금합니다. 예를 들어 score 속성으로 노드를 인덱싱하거나 score 속성이있는 모든 노드에서 일종의 참조 노드에 대한 관계를 만듭니다. 귀하의 유스 케이스에 따라 달라집니다.

+0

대부분의 노드에는 점수 값이 있습니다. 여기서 사용 사례는 가장 높은 점수를 가진 X 노드를 찾는 것이므로 주문을 사용했습니다. 아마도 각 노드에서 스코어 속성을 설정하려고 할 때 현재의 높은 점수 집합과 비교하고 인덱싱 된 높은 점수 노드와의 높은 점수 관계를 만들어야합니다. – CoffeeCoder

+0

흠 노드의 대부분에 점수 값이있는 경우 특히 그래프가 커지면 값 비싼 작업이됩니다. 그래프 외부에서 이것을 처리 할 수있는 다른 방법을 생각해 봐야 할 것입니다. – Luanne

1

Luanne가 말한 것처럼 그래프의 모든 노드에서 검색하는 데 시간이 걸립니다. 당신은 (공통 노드를 검색하여, 그들을 색인에 의해, 또는 - Neo4j이 사용하는 경우 - 그 라벨로) 만 점수 속성이 노드에서 검색 할 수

추가 설명을위한 http://docs.neo4j.org/chunked/milestone/indexing.html을 참조하십시오 인덱스 (더 일반적인 솔루션 인 것 같습니다).

+0

많은 사람들이 점수 속성을 가지기 때문에 모든 노드를 인덱싱하는 것이 좋습니다. 따라서 인덱싱을 사용하면 빠릅니다. – CoffeeCoder

+0

많은 노드가 있더라도 인덱싱을 사용하면 더 빨리 처리 할 수 ​​있습니다. 문제는 색인을 생성하면 데이터베이스가 커진다는 것입니다. 어쨌든, 당신이 사용하는 데이터베이스의 종류 (나는 그래프를 의미하든 말든)에 관계없이 엔티티가 많을수록 더 많은 엔티티를 찾을 수 있습니다. 색인을 생성하여 의견을 보내주십시오. 문제는 노출 된 Neo4j에 관한 것입니다. –