Neo4j 2.1.4를 사용 중입니다. 노드 사이에 'IS A'관계 (및 다른 유형의 관계)가있는 그래프가 있습니다. 나는 그래프 내부에 몇 가지 계층 구조 (IS A 관계)가 있으며, 두 번째 계층 구조의 일부 자손과 특정 관계가있는 하나의 계층 구조의 자손 (IS A 관계)을 알아야합니다. 그 특정 - 알려진 관계가 존재하는 경우, 나는 첫 번째 계층의 자손을 반환합니다.Neo4j - 슬로우 사이퍼 쿼리 - 계층 구조가있는 큰 그래프
입력 : 'ID_parentnode_hierarchy_01', 'ID_relationship', 'ID_parentnode_hierarchy_02'.
OUTPUT : 'ID_parentnode_hierarchy_02'의 일부 자손과 'ID_relationship'이있는 'ID_parentnode_hierarchy_01'의 자손 (IS A 관계)입니다.
참고 : 그래프에는 500.000 개의 노드와 200 만 개의 관계가 있습니다.
이 사이퍼 쿼리를 사용하고 있지만 매우 느립니다 (4GB RAM 및 3GHz 펜티엄 듀얼 코어 64 비트 PC에서는 약 40 초). 빠른 쿼리를 작성할 수 있습니까?
MATCH (parentnode_hierarchy_01: Node{nodeid : {ID_parentnode_hierarchy_01}})
WITH parentnode_hierarchy_01
MATCH (parentnode_hierarchy_01) <- [:REL* {reltype: {isA}}] - (descendants01: Node)
WITH descendants01
MATCH (descendants01) - [:REL {reltype: {ID_relationship}}] -> (descendants02: Node)
WITH descendants02, descendants01
MATCH (parentnode_hierarchy_02: Node {nodeid: {ID_parentnode_hierarchy_02} })
<- [:REL* {reltype: {isA}}] - (descendants02)
RETURN DISTINCT descendants01;
고맙습니다.
가능한 경우 일반 relationshiptypes 및 rel-property는 사용하지 마십시오. 그러면 쿼리 속도가 느려질 것입니다. –
CSV 파일에서 'LOAD CSV WITH HEADERS FROM ...'및 '... CREATE (c1) - [: REL {reltype : rel.relid, reldesc : rel.desc}] -> (c2) '. 관계의 유형으로 'rel.relid'(CSV 파일에서)를 설정하는 방법을 모르겠습니다. 그래서 일반 REL 관계를 사용합니다. 감사. – Vicente