2016-07-28 3 views
0

안녕하세요, 저는 현재 다른 DB로 마이그레이션하려고합니다. 불행히도 파이썬이 관련되어 있습니다. 싱글 스레딩을 할 수 있었지만 1M 데이터를 완료하는 데 몇 시간이 걸렸습니다. Java executor와 future 같은 파이썬에서 비슷한 방법이 있습니까? USER_LIST 나는 내가 하나의 삽입을하는 단일 스레드 대신 한 번에, 예를 들어 팔을 삽입하는 8 개 개의 동시 스레드를 실행하면 더 빨리 한꺼번에 많이있을 거라고 생각 1000/1MDB 삽입을위한 멀티 스레딩 파이썬

for data in user_list: 
    q = """ insert into users(id,name,address,password) 
     Values({id},{name},{address},{password}) 
     """.format(id=data['id'],name=data['name'],address=data['address'],password=data['password']) 
    db.command(q) 

의 덩어리임을

노트

+0

어떤 DB를 사용하고 있습니까? 더 빠를 수도 있지만 각 스레드마다 별도의 db 연결이 필요합니다. 나는 당신의 DB가 "bulk inserts"또는 "batch inserts"를 지원하는지 처음에 보았을 것이다 - 그것들은 대개 한 번에 하나의 행을 삽입하는 것보다 훨씬 빠르다. – ErikR

+0

아, 그래서 동시에 n 삽입을 할 때 하나의 연결을 사용할 수 없습니까? 나는 현재 SQL을 orientdb로 임포트 중이다. @ ErikR – kenlz

+0

아니요 - 스레드 당 하나의 연결이 필요합니다. 또한 내 대답을 참조하십시오. – ErikR

답변

1

의견에서 orientdb를 사용하고 있다고 말하면 은 SQL Batch입니다.

SQL BATCH를 사용하면 행을 병렬로 삽입하지 않지만 각 명령의 왕복을 피할 수 있습니다.

또한 pyorient 라이브러리를 사용하여 파이썬에서 SQL BATCH를 사용할 수 있습니다

https://github.com/mogui/pyorient#execute-orientdb-sql-batch

병렬로 데이터를 삽입하려면 각 스레드에 대한 하나, 다중 연결을 만들어야합니다.

+0

Yup은 SQL Batch를 사용하여 끝났지 만 각 열을 구문 분석하는 대신 별도의 CSV를 클래스로 내보내는 작업을 마쳤습니다. 지금은 그럴 것입니다. 감사합니다 :) – kenlz

관련 문제