py2neo python을 사용하여 cypher 명령을 실행하여 (포함되지 않은) neo4j 데이터베이스에 많은 수의 노드 (~ 500,000 개)를 삽입하려고합니다. 모듈 (py2neo.cypher.execute). 결국 나는 py2neo에 대한 의존성을 제거 할 필요가 있지만, 현재 사이퍼와 neo4j에 대해 더 많이 알기 전까지 사용하고 있습니다.사이퍼를 사용하여 neo4j 데이터베이스에 노드를 삽입하는 가장 효율적인 방법
두 개의 노드 유형 A와 B가 있으며 대다수의 노드는 A 유형입니다. A- [r1] -A와 A- [r2] -B와 같은 두 가지 가능한 관계 r1과 r2가 있습니다. . 유형 A의 각 노드는 0 - 100 r1 관계를 가지며 유형 B의 각 노드는 1 - 5000 r2 관계를 갖습니다.
현재 큰 CREATE 문을 작성하여 노드를 삽입하고 있습니다. 예를 들어 나는 성명서를 가지고있을 수도있다.
CREATE (:A {uid:1, attr:5})-[:r1]-(:A {uid:2, attr:5})-[:r1]-...
... 여기에서 또 다른 5000 개의 노드와 관계가 그래프에 선형 체인을 형성 할 수있다. 이것은 정상적으로 작동하지만 꽤 느립니다. 또한이 노드를 사용하여 색인을 생성합니다.
CREATE INDEX ON :A(uid)
모든 유형 A 노드를 추가 한 후 CREATE 문을 사용하여 유형 B 노드를 다시 추가합니다. 마지막으로,
MATCH c:B, m:A where c.uid=1 AND (m.uid=2 OR m.uid=5 OR ...)
CREATE (m)-[:r2]->(c)
등의 문을 사용하여 r2 관계를 추가하려고합니다. 여기서 ... 수천 개의 OR 문을 나타낼 수 있습니다. 이것은 초당 약간의 관계를 추가하는 것은 정말 느린 것 같습니다.
이렇게하려면 더 좋은 방법이 있습니까? 나는 여기서 완전히 추적하고 있지 않습니까? 나는 this question을 보았지만 이것은 cypher를 사용하여 효율적으로 노드를로드하는 방법을 설명하지 않습니다. 내가 본 모든 것은 자바를 사용하는 것처럼 보일뿐 실제 키퍼 쿼리를 사용하지 않고도 사용할 수 있습니다.
두 번째 Wes 주석 : 매개 변수, 더 작은 문, 2.0을 사용하는 경우 cypher에 대한 트랜잭션 http 끝점 사용 고려 : 참조 : http://neo4j.org/develop/cypher 및 가져 오기에 대한 레이블 참조 : http : //www.neo4j.org/develop/import 및 http://jexp.de/blog/2013/05/on-importing-data-in-neo4j-blog-series/ –
조언을 주셔서 감사합니다. 파이썬에서 cypher CREATE 문으로 매개 변수를 사용하는 방법을 알고 있습니까? 매개 변수에 대해 알아 낸 모든 것은 자바 해시 맵에 대해 이야기하는 것입니다. – savagent
py2neo에서는 params라는 사전 매개 변수입니다. http://book.py2neo.org/en/latest/cypher.html HTTP를 통해 원시 JSON을 수행하는 경우 쿼리와 함께 params : {uid : ...}를 JSON 요청에 추가 할 수 있습니다. –