2016-07-28 51 views
0

嗨,大家好我目前正在尝试将当前数据库迁移到另一个,并且该过程不幸涉及到python。我能够做到单线程,但它非常慢需要数小时才能完成1M数据。 python中有类似Java执行者和期货的方法吗?针对数据库插入的多线程Python

注意USER_LIST是1000/1M

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) 

一大块,我认为这将是一个整体快很多,如果我在一个时间单个线程的运行例如8个并发线程插入8,而不是做单个插入

+0

您正在使用哪个数据库?它可能会更快,但每个线程都需要单独的数据库连接。我首先会看到您的数据库是否支持“批量插入”或“批量插入” - 这些通常比一次插入单行要快得多。 – ErikR

+0

嗯,所以我不能使用1个连接同时插入?我现在正在将sql导入到orientdb中。 @ErikR – kenlz

+0

不 - 你需要每个线程一个连接。另请参阅我的答案。 – ErikR

回答

1

既然你在评论中说你使用的是orientdb,那么看看 在SQL Batch的能力。

使用SQL BATCH不会并行插入行,但会避免每条命令的往返行程。

您也可以使用pyorient库使用SQL批处理从Python的:

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

插入并行数据,您将需要创建多个连接, 一个为每个线程。

+0

Yup结束了使用SQL批处理,但不是解析每一列,我最终导出单独的CSV作为类。那会做现在。 谢谢:) – kenlz