繁体   English   中英

使用Python将数百万条记录插入MySQL数据库

[英]Inserting millions of records into MySQL database using Python

我有一个包含大约1亿条记录(数字)的txt文件。 我正在使用Python读取此文件并使用python中的简单插入语句将其插入MySQL数据库。 但它花了很长时间,看起来像剧本永远不会完成。 实施这一过程的最佳方式是什么? 该脚本使用的内存不到1%,CPU占10%到15%。

任何处理这些大数据并将其有效插入数据库的建议都将不胜感激。

谢谢。

将行插入表中的最快方法是使用LOAD DATA INFILE语句。

参考: https//dev.mysql.com/doc/refman/5.6/en/load-data.html

使用单独的INSERT语句一次插入一行,RBAR(通过痛苦行划线)是非常慢的,因为数据库必须完成所有工作才能执行语句...解析语法,语义,准备执行计划,获取和释放锁,写入二进制日志,...

如果你必须做INSERT语句,那么你可以使用MySQL多行插入,这会更快。

  INSERT INTO mytable (fee, fi, fo, fum) VALUES 
   (1,2,3,'shoe')
  ,(4,5,6,'sock')
  ,(7,8,9,'boot') 

如果一次插入四行,则需要执行的语句数量减少75%。

坚持使用python,您可能想尝试从输入中创建一个元组列表,并使用python mysql连接器中的execute many语句。

如果文件太大,你可以使用生成器将其变成更容易消化的东西。

http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html

在最近尝试这样做之后,我发现了一种快速方法,但这可能是因为我正在使用AWS Windows服务器运行python,因为它具有与数据库的快速连接。 但是,在一个文件中不是100万行,而是多个文件,最多可添加100万行。 它比我测试的其他直接数据库方法更快。

通过这种方法,我能够顺序读取文件,然后运行MySQL Infile命令。 然后我也使用了这个过程的线程。 定时过程需要20秒才能将100万行导入MySQL。

免责声明:我是Python的新手,所以我试图看看我能在多大程度上推动这个过程,但它导致我的DEV AWS-RDS数据库无法响应(我不得不重新启动它),所以采取的做法不是压倒这个过程可能是最好的!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM