2014-07-26 4 views
0

그래프에 노드가있는 활동 노드 목록이 있습니다. 가장 최근의 count 활동을 반환하기 쉽도록 활동이 연대순으로 진행됩니다. 2.0.1과 같은 이전 버전의Neo4j 2.1.2 : 노드의 긴 목록에 액세스하는 올바른 방법

(:node)-[:ACTIVITY]->(:activity)-[:ACTIVITY]->(:activity)... 

, 나는 (이 트랜잭션 REST 엔드 포인트를 통해 모든 사이퍼이다) 다음을 수행 할 수 있습니다 : 그래프는 다음과 같습니다

MATCH (n:node)-[:ACTIVITY*]->(a:activity) 
WITH DISTINCT a SKIP { start } LIMIT { count } 

startcount 목록에서 어떤 활동을 반환할지 결정하는 매개 변수입니다. Neo4j 2.1.2에서는 CPU가 100 %로 급상승하고 강제로 멈출 때까지 Neo4j가 정지합니다. 그래서 쿼리에 제한을 두려고했지만 약 50보다 큰 값은 반환되지 않습니다.

이 쿼리는 1 개 활동 노드 반환이 쿼리는 100 %의 CPU를 쐐기

MATCH (n:node)-[:ACTIVITY*0..10]->(a:activity) 
RETURN a 

을 결코 반환 :이 때문에

MATCH (n:node)-[:ACTIVITY*0..100]->(a:activity) 
RETURN a 

, 왜 두 번째 쿼리 하나 개의 활동 노드 만 돌아 오지 않을거야? 긴 노드 목록을 쿼리하는 올바른 방법은 무엇입니까?

+0

:

그렇지 않으면 여기에서 시작하는 예입니다, 당신을 위해 서버 확장 될 것이다 보기. – Bill

+0

그래프에서 어딘가에 사이클이 생겼다는 생각이 든다. 비록이 특정 쿼리에 대한 경로를 왜 지나치는지 이해할 수는 없지만 말이다. 불행히도 정확히 무슨 일이 일어나고 있는지 파악하기 위해 쿼리를 실행하려고 할 때마다 쿼리가 중단되기 때문에 정확하게 어디에 있는지 알 수 없습니다. – Bill

+0

샘플 데이터베이스를 살펴 보겠습니다. – mayr

답변

1

Cypher는 아직 긴 단일 관계 목록을 처리하는 데 적합하지 않습니다.

마크 단지에 대한 블로그 게시물 출판 :

http://www.markhneedham.com/blog/2014/07/20/neo4j-2-1-2-finding-where-i-am-in-a-linked-list/

을 그리고 난 새로운 사이퍼 쿼리 플래너와 함께 약간의 실험과 훨씬 더 빨랐다.

https://gist.github.com/jexp/4c2601d68d54d8a9c939

당신은 쿼리에 접두사로

cypher 2.1.experimental를 사용하려고 할 수 있습니까? 나는 누군가가을하고자하는 경우 실패 사례를 보여 샘플 데이터베이스 및 예제 질문이

https://github.com/jexp/neo4j-activity-stream

+0

마이클에게 감사드립니다. Cypher가 발전하고 있다는 것을 알았지 만 Java 코드와 비교할 때 속도가 얼마나 느린 지 미약합니다. 내가하는 모든 일에 대해 서버 확장을 작성해야합니까? 그것은 대부분의 사람들이 현재하고있는 것입니까? – Bill

+0

또한 실험 쿼리 플래너가 얼마나 안정적입니까? 모든 쿼리에이 태그를 사용해야합니까, 아니면 나쁜 생각입니까?나는 그것을 테스트 한 쿼리에 대해 꽤 좋은 성능 향상을보고 있으며, 모든 쿼리를 실행하는 것에 대해 생각하고 있습니다. – Bill

관련 문제