2014-07-07 3 views
2

Neo4j를 사용하여 거대한 그래프 데이터베이스 (백만 노드 이상)를 구축하고 있습니다. 내가 지금하고있는 방식은 각각의 노드에 대해 큐퍼 CREATE (n {property:'value'}) 쿼리를 실행하는 것입니다. 예상대로 이것은 비효율적 인 방법이며 많은 시간이 걸립니다. 누군가이 문제를 극복하기위한 대체 방법을 제안 할 수 있습니까? Neo4j가 여러 노드를 생성하기 위해 기본 배치 인터페이스를 제공한다고 들었습니다. 나는 현재 (관계 포함) 코드의 버전을 사용하고 있습니다 :Neo4j가 여러 개의 노드와 관계를 만듭니다.

create (a { name: "a" })-[:rel1]->(b {name : "b"}),(c {name: "c"})-[:rel2]->(d {name:"d"}),...

그것이 효율적인 방법인가, 아니면 더 좋은 방법이 있습니까? 미리 감사드립니다. :)이 Neo4j 웹 사이트에 대한 개요가

답변

2

: http://www.neo4j.org/develop/import

하지만, 짧은 내가 말할 것입니다 만 개 이상의 노드가 될 :

당신이 자바로 코딩 할 수있는 경우 :

다른 http://docs.neo4j.org/chunked/stable/batchinsert.html

:

https://github.com/jexp/batch-import

내가 생각 하는데요개
+0

일괄 처리를 실행하는 방법은 있습니까? 조금 궁금해서 미안해. – AnotherCodingEnthusiast

+0

CVS 배치 삽입 기는 쉘 스크립트 및 일부 CSV 입력 파일을 통해 실행됩니다. –

+0

3.0.0 릴리스부터는 .NET 클라이언트와 같은 다른 클라이언트 라이브러리가 배치 삽입 API에 액세스 할 수 있습니다. – DannyMeister

4

두 대안 :

  1. LOAD CSV 지원 사용 http://docs.neo4j.org/chunked/stable/query-load-csv.html
  2. 를 사용하여 하나의 paramaterized 사이퍼 문 및 매개 변수의 배열을 제공 : http://docs.neo4j.org/chunked/stable/query-create.html#create-create-multiple-nodes-with-a-parameter-for-their-properties

가 그렇지 않으면있다 배치 삽입 장치.

+0

단일 매개 변수화 된 Cypher 문을 권장합니까? Neo4j가 처리 할 수있는지도 배열이 정말로 큰 것이 아니겠습니까? 또한, 내 데이터는 scipy 스파 스 매트릭스 형식 (더 효율적이기 때문에)입니다. 그래서 CSV로 변환하는 것이 좋은 대안이 될지 생각하고있었습니다. – AnotherCodingEnthusiast

+0

예 - 한 장의지도 배열은 막대한 양의 경우 문제가 될 수 있습니다. CSV는 ok이거나 그렇지 않으면 언급 된 배치 삽입기를 사용해야합니다. –

0

unwind을 유용하게 사용할 수 있습니다. 당신이 자바 API를 사용하는 가정 , 여기 그루비

나는이 방법으로 큰 성공을 했어
List<Map<String, Object>> props = yourList.collect {["prop1": it.prop1, "prop2":it.prop2]} 
String q = "UNWIND {props} AS p create(a {name: p.prop1})-[:rel1]->(b {name: p.prop2}) " 
neo4jOperations.query(q, ["props" : props]) 

를 사용하여 작은 조각입니다. 배치 크기에 따라 5-30 배의 속도 향상을 볼 수 있어야합니다.

관련 문제