2017-02-23 3 views
0

py2neo (v 3.1.2)와 함께 python 3을 사용하여 MySQL에서 많은 양의 데이터를 Neo4j에 삽입하고 있습니다. MySQL의 테이블에는 약 2 천만 개의 행이 있습니다. neo4j의 웹 사이트에서 제안한대로 MySQL 데이터를 CSV으로 변환하지 않고 삽입하고 싶습니다.MySQL에서 neo4j에 큰 데이터 세트 삽입

transaction=graph_db.begin() 
sql="SELECT id FROM users" 
cursor.execute(sql) 
user_data=cursor.fetchall() 
count=1 
for row in user_data: 
    user_node=Node("User",user_id=row[0]) 
    transaction.create(user_node) 
    if count%10000==0: 
     transaction.commit() 
    count=count+1 

목표는 10000의 일괄 삽입했다 그러나 트랜잭션은 첫 번째 반복 (10K의 배치의 첫 번째 삽입) 후 고장 :

내 코드는 다음과 같습니다. 다음은 오류입니다.

raise TransactionFinished(self) 
py2neo.database.TransactionFinished: <py2neo.database.BoltTransaction object at 0x104e36588> 

누군가이 오류의 의미와이 문제를 해결하는 방법을 설명 할 수 있습니까?

답변

0

나는 파이썬 모르지만, 문제는 사이클에서 트랜잭션을 커밋 열지 않는 점이다 :

sql="SELECT id FROM users" 
cursor.execute(sql) 
user_data=cursor.fetchall() 
count=1 
for row in user_data: 
    if count%10000==1: 
     transaction=graph_db.begin() 
    user_node=Node("User",user_id=row[0]) 
    transaction.create(user_node) 
    if (count%10000==0) or (count==len(user_data)): 
     transaction.commit() 
    count=count+1 
+0

나는이 일 것이라고 생각하지 않습니다. 첫 번째 10000 노드는 트랜잭션 객체를 선언하지 않고 어떻게 만들 수 있습니까 (if 조건으로 초기화했기 때문에). – Jmj

+0

나는 그것을 시험해 보았다. 같은 오류가 다시 발생했습니다. neo가 db에 노드를 추가하는 속도와 관련이 있습니까? 이는 다음 번 삽입 배치를 구성하는 데 걸리는 시간보다 더 길 수도 있습니다. – Jmj

+0

안녕하세요, 제 잘못입니다. 나는 값 중 하나를 잘못 설정했습니다. 고마워, 고마워! 참고로,이 방법은 이러한 대형 데이터베이스에 대해 실행 가능합니까? 아니면 실제로 SQL 덤프 -> CSV-> Neo 삽입 경로를 사용해야합니까? – Jmj

관련 문제