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가이 정도의 데이터를 처리 할 수 있는지 아는 사람 있습니까?
감사합니다.
브라우저를 사용하고 있습니다. 색인을 만들지 않았습니다. 그러나 이것이 없어도 id를 사용하여 해당 개념을 성공적으로 쿼리하고 추가 할 수있는 관계를 따를 수있었습니다. 나는 이것을 시험해 볼 수도 있고 내일 껍질을 시험해 볼 수도있다. 기본주기 커밋이 1000이 아닌가? 팁 주셔서 감사. – alexycyap
내 대답을 업데이트했습니다 –
자동으로 인덱스를 추가하고 USING PERIODIC COMMIT 1000을 사용하는 개념 (ID)에 고유 제한 조건을 추가했습니다. 결과적으로 모든 내 관계가 훨씬 빨리로드되고 오류없이로드됩니다. 어느 비트가 해결되었는지는 모르지만이 문제를 해결할 수 있도록 도와 주셔서 감사합니다. – alexycyap