[英]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.