我有一个包含大约1亿条记录(数字)的txt文件。我在python中读取此文件,并使用Python中的简单insert语句将其插入到MySQL数据库中。但是它花费了很长的时间,看起来脚本永远不会完成。执行此过程的最佳方式是什么?该脚本使用了不到1%的内存和10%到15%的CPU。
任何建议,以处理如此庞大的数据,并有效地插入到数据库中,将非常感谢。
谢谢。
发布于 2015-06-19 12:56:51
坚持使用python,您可能希望尝试从您的输入创建一个元组列表,并使用python mysql连接器中的execute many语句。
如果文件太大,您可以使用生成器将其分块为更易于消化的文件。
http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html
发布于 2015-06-19 10:06:01
向表中插入行的最快方法是使用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%。
发布于 2018-10-26 17:48:55
最近我尝试过这样做,我找到了一种快速的方法,但这可能是因为我正在使用AWS Windows服务器来运行python,该服务器可以快速连接到数据库。然而,不是在一个文件中有一百万行,而是多个文件加起来有一百万行。不管怎样,它比我测试的其他直接DB方法更快。
使用这种方法,我可以按顺序读取文件,然后运行MySQL Infile命令。然后我在这个过程中也使用了线程。对进程进行计时将100万行数据导入MySQL需要20秒的时间。
免责声明:我是Python的新手,所以我试着看看我可以将这个过程推进到什么程度,但它导致我的DEV AWS-RDS DB变得没有响应(我不得不重新启动它),所以采取一种不会压倒这个过程的方法可能是最好的!
https://stackoverflow.com/questions/30928713
复制相似问题