2013-10-28 2 views
0
START names = node(*), 
    target=node:node_auto_index(target_name="TARGET_1") 
MATCH names 
WHERE NOT names-[:contains]->() 
    AND HAS (names.age) 
    AND (names.qualification =~ ".*(?i)B.TECH.*$" 
    OR names.qualification =~ ".*(?i)B.E.*$") 
CREATE UNIQUE (names)-[r:contains{type:"declared"}]->(target) 
RETURN names.name,names,names.qualification 

Iam은 거의 1,80,000 개의 이름 노드로 구성되어 있으며 위의 과정을 반복하여 대상을 변경하여 100 번을 넘는 고유 한 관계를 만들었습니다. 그것의 시간이 너무 많이 걸릴. 어떻게 해결할 수 있습니다 ..고유 한 관계 만들기에 많은 시간이 걸린다.

나는 neo4j 2.0.0.5와 자바 1.7을 사용하여 java와 iterated.iam으로 쿼리를 빌드합니다.

답변

2

나는 그것을 이해한다고 생각하기 때문에 사이퍼 쿼리를 편집했지만 남은 질문은 거의 읽을 수 없습니다. 공백과 구두점을 사용하여 편집하면 작업하려는 내용을 이해하기가 더 쉬울 수 있습니다. 그 때까지는 쿼리가 느려지는 것에 대한 몇 가지 생각이 있습니다.

  1. 그래프의 모든 노드를 바인딩합니다. 일반적으로 느립니다.
  2. 그래프의 모든 노드를 두 번 바인딩합니다. 먼저 시작 절에서 보편적으로 바인딩합니다 : names=node(*), 그리고 match 절에서 보편적으로 바인딩합니다 : MATCH names, 그런 다음에만 패턴을 제한합니다. 나는 Cypher 엔진이 이것을 어떻게 만들어 내는지에 대해 잘 모른다. (아마도 편두통을 일으켜 커피 냄비를 만들기 위해 간다.) 불필요한 경우 시작 부분에서 names=node(*)을 삭제할 수 있습니다. 또는 match 절을 삭제하면 실제로는 아무 것도하지 않기 때문에 작동 할 수 있다고 생각합니다. 레거시 인덱싱을 사용하는 동안에는 start 절이 필요합니다.
  3. Neo4j 2.x를 사용하고 있지만 적어도이 쿼리에서는 레이블 대신 레거시 인덱싱을 사용합니다. 데이터와 모델을 모르는 상태에서 성능 차이가 무엇인지 알기는 어렵지만 쿼리 작성 (및 읽기)이 훨씬 쉬워집니다. 그래서, 그것은 천천히 다른 종류입니다. 레이블 및 레이블 색인이있는 경우 쿼리 성능이 향상 될 것입니다.

그래서, 먼저, 노드의 보편적 인 바인딩 중 하나를 제거하려고 데이터를 구조화하기 위해 2.X에게 schema 도구를 사용합니다.

MATCH target:Target 
WHERE target.target_name="TARGET_1" 
WITH target 
MATCH names:Name 
WHERE NOT names-[:contains]->() 
    AND HAS (names.age) 
    AND (names.qualification =~ ".*(?i)B.TECH.*$" 
    OR names.qualification =~ ".*(?i)B.E.*$") 
CREATE UNIQUE (names)-[r:contains{type:"declared"}]->(target) 
RETURN names.name,names,names.qualification 

그런 쿼리가 데이터에서 빠르지는 모르겠지만 다음과 같은 쿼리를 작성할 수 있어야합니다. 모든 노드에 "이름"레이블을 넣으면 MATCH names:Name은 여전히 ​​데이터베이스의 모든 노드를 바인드하므로 여전히 느려질 것입니다.

P. 작성한 관계에 contains이라는 TYPE이 있으며 값이 declaredtype이라는 속성을 부여합니다. 어쩌면 당신은 좋은 이유가있을 수 있습니다. 그러나 그것은 잠재적으로 매우 혼란 스럽습니다.

편집 : 귀하의 질문에 내 대답을 통해 읽기
다시 나는 더 이상 내가 심지어 사이퍼 쿼리를 이해할 수 있다고 생각하지 않습니다. (바운드 노드와 노드의 속성을 모두 반환하는 이유는 무엇입니까?) console.neo4j.org에 샘플 데이터를 게시하고 모델의 모양과 수행하려는 작업을 자세히 설명하십시오. 내 대답이 당신의 질문에 전혀 부합하는지 알려주십시오.

+0

초보자를 neo4j로 초청하고 있습니다. Indexing and Lables ...와 혼동 스럽습니다. 대답은 좋습니다. 색인에 문제가있는 답을 읽은 후 색인 생성을 위해 Neo4j의 링크를 참조했습니다. 나는 이미 csv Importer를 사용하여 노드와 관계를 가져 왔으며, 어떻게 색인 생성을 할 수 있습니까? – sakar

관련 문제