2014-08-28 3 views
1

Neo4J Community 2.1.3을 사용하여 개념 및 관계 목록을 저장하는 중입니다. 온라인 매뉴얼에 설명 된대로 Web 인터페이스에서 Cypher를 사용하여 샘플 테스트 데이터 (CSV 파일)를 Neo4J에로드하려고합니다.Neo4J Cypher에서 CSV를로드하면 "알 수없는 오류"또는 교착 상태가 감지 됨

내 데이터는 다음과 같이 보입니다 :

concepts.csv을

id,concept 
1,tree 
2,apple 
3,grapes 
4,fruit salad 
5,motor vehicle 
6,internal combustion engine 

는 relationships.csv

sourceid,targetid 
2,1 
4,2 
4,3 
5,6 
6,5 

등등 ... 내 샘플의 경우, 나는 ~ 17K 개념을 가지고 ~ 16M 관계. 매뉴얼에 따라 Neo4J 서버를 시작하여 Cypher에 입력했습니다.

LOAD CSV WITH HEADERS FROM "file:///data/concepts.csv" AS csvLine 
CREATE (c:Concept { id: csvLine.id, concept: csvLine.concept }) 

이 기능은 정상적으로 작동하고 개념이로드되었습니다. 그렇다면 내 관계를로드하려고했습니다.

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///data/relationships.csv" AS csvLine 
MATCH (c1:Concept { id: csvLine.sourceid }),(c2:Concept { id: csvLine.targetid }) 
CREATE (c1)-[:RELATED_TO]->(c2) 

이 한 시간 정도 실행하지만, 항상 하나와 중지 것 (! 다른 정보)

  • "알 수없는 오류"또는
  • "Neo.TransientError.Transaction. DeadlockDetected는 " 과 같은 자세한 메시지와 함께"LockClient [695]는 RWLock [RELATIONSHIP (572801), hash = 267423386] 이후 리소스 RWLock을 기다릴 수 없음 LockClient [695] < - [: HELD_BY] - RWLock [NODE (4145) , 해시 = 1224203266] < - [: WAITING_FOR] - LockClient [691] < - [: HELD_BY] - RWLock [RELATIONSHI P (572801), 해시 = 267423386] "

어쩌면 200-300K 관계를로드 한 후 중지됩니다. 나는 relationships.csv에 "sort | uniq"를 했으므로 중복이 없다고 확신합니다. 데이터/로그의 로그 파일을 보았지만 오류 메시지가 없습니다.

이전에 본 사람이 있습니까? BTW, 관계의 작은 부분을 잃어도 상관 없으므로 ACID 트랜잭션을 해제 할 수 있으면 행복 할 것입니다. 또한이 단계에서 코드 작성 (Java API 사용)을 피하려고합니다. 난 그냥 내 데이터를로드하려고합니다. 이 작업을 수행 할 여지가 있습니까?

내 전체 데이터 세트에는 수백만 가지의 개념과 수억 개의 관계가 있습니다. Neo4J가이 정도의 데이터를 처리 할 수 ​​있는지 아는 사람 있습니까?

감사합니다.

답변

0

제대로하고 있습니다. neo4j-shell 또는 브라우저를 사용합니까?

다음을 수행 : create index on :Concept(id);?

색인이없는 경우이 id 값에 대해이 레이블의 모든 노드를 검색해야하므로 개념 검색이 기하 급수적으로 길어집니다. 두 개의 일치 항목 모두에 대해 색인을 사용하는 경우 검색어 앞에 접두어를 사용하여 PROFILE을 확인해야합니다.

수백만 개의 관계를 가져 오기 전에 교착 상태를 본 적이 없었습니다. 전체 스택 추적을 공유 할 수 있습니까?쉘을 사용한다면, 할 수 있습니다. export STACKTRACES=true

USING PERIODIC COMMIT 1000을 사용할 수 있습니까?

+0

브라우저를 사용하고 있습니다. 색인을 만들지 않았습니다. 그러나 이것이 없어도 id를 사용하여 해당 개념을 성공적으로 쿼리하고 추가 할 수있는 관계를 따를 수있었습니다. 나는 이것을 시험해 볼 수도 있고 내일 껍질을 시험해 볼 수도있다. 기본주기 커밋이 1000이 아닌가? 팁 주셔서 감사. – alexycyap

+0

내 대답을 업데이트했습니다 –

+0

자동으로 인덱스를 추가하고 USING PERIODIC COMMIT 1000을 사용하는 개념 (ID)에 고유 제한 조건을 추가했습니다. 결과적으로 모든 내 관계가 훨씬 빨리로드되고 오류없이로드됩니다. 어느 비트가 해결되었는지는 모르지만이 문제를 해결할 수 있도록 도와 주셔서 감사합니다. – alexycyap