MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据[亲测有效]

MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据[亲测有效]MySQL LOAD DATA INFILE 从文件(csv、txt)批量导入数据

MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据

 MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据[亲测有效]

 最近做的项目,有个需求(从Elastic Search取数据,业务运算后),每次要向MySQL插入1300万条数据左右。最初用MySQL的executemany()一次插入10000条数据,统计的时间如下:

MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据[亲测有效]

 如上,插入时间由于系统的IO变化,会有波动,最快在4秒左右。

 后改为”load data infile”大概,10万条数据平均1秒~1.5秒,实际的代码示例如下:

query = "LOAD DATA INFILE "/var/lib/mysql-files/es.csv" INTO TABLE g_visit_relation_asset_temp FIELDS TERMINATED BY "," LINES TERMINATED BY "
" IGNORE 1 LINES 
                        (srcip, srcport, dstip, dstport, l7p, @dummy, cnt, @dummy, cnt_date)"
mysqlcur.execute(query)
mysqlconn.commit()

代码100分

说明:

(1)MySQL需要开启对”load data inflie”的权限支持

    mysqlcur.execute(“SET GLOBAL local_infile = 1”)
(2)
需要对mysql文件目录(笔者: “/var/lib/my-files/”)有管理员的权限(查看mysql路径,用“locate mysql”)
如果没有的话,可以指定本地路径,需要加上关键字”local”即:
LOAD DATA LOCAL

(3)Concurrency 支持

 如果默认是 LOW_PRIORITY ,则LOAD DATA要等其它客户端读完了,才会开始写入。加上“Concurrency ”可以,在读的同时,同时支持写入,不过速度会稍微下降一点,笔者测试环境影响不大

(4)IGNORE 1 LINES (跳过第一行)

 笔者通过python pandas to_csv()导出的csv是带标题的,如下:

MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据[亲测有效]

不需要标题导入到数据库,就调过嘛

(5)@dummy ,通过占位符,跳过不需要的数据

导入到表的column顺序必须和文件保持一致,通过@dummy可以跳过不需要的column

(6)character set 指定字符集

对于汉字,你需要加上 character set utf8

(8)分隔符及换行符

代码100分 以“,“作为分隔符,以“
"作为换行符: FIELDS TERMINATED BY "," LINES TERMINATED BY "
"

其他性能优化相关(Only for MyISAM):

通过设置隔离级别、去除索引检查、唯一性检查等提高速度(分session和global级别)提高写入速度,插入之前,设置如下配置:

    mysqlcur.execute("SET SESSION FOREIGN_KEY_CHECKS = 0")
    mysqlcur.execute("SET SESSION UNIQUE_CHECKS = 0")
    mysqlcur.execute("SET SESSION tx_isolation="READ-UNCOMMITTED"")
    mysqlcur.execute("SET SESSION sql_log_bin = 0")

Loda data infile 完了再改回去,如下:

代码100分    mysqlcur.execute("SET SESSION FOREIGN_KEY_CHECKS = 1")
    mysqlcur.execute("SET SESSION UNIQUE_CHECKS = 1")
    mysqlcur.execute("SET SESSION tx_isolation="REPEATABLE-READ"")
    mysqlcur.execute("SET SESSION sql_log_bin = 1")

“DISABLE KEYS” 然后 “ENABLE KEYS”,笔者实际测试没什么用,只是导入数据更快,总的时间并没有提升。区别在于:一个是插入一条,创建一个索引;一个是全部导入完了后,再一次创建所有索引。

引用:

*******************************************************************************************

精力有限,想法太多,专注做好一件事就行

  • 我只是一个程序猿。5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创
  • 写博客的意义在于打磨文笔,训练逻辑条理性,加深对知识的系统性理解;如果恰好又对别人有点帮助,那真是一件令人开心的事

*******************************************************************************************

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7736.html

(0)
上一篇 2023-03-15
下一篇 2023-03-15

相关推荐

  • 使用Python匹配以A开头和结尾的单词实现自然语言处理

    使用Python匹配以A开头和结尾的单词实现自然语言处理Python中的正则表达式是一种特殊的语法,可以用来匹配字符串中符合特定格式的文本。在Python中,使用re模块来支持正则表达式的操作。

    2023-12-23
    57
  • Python指令:用于控制程序行为的关键命令

    Python指令:用于控制程序行为的关键命令if语句是Python中一个重要的条件判断语句,可以用于控制程序的流程,使程序可以在特定情况下自动处理数个分支。if语句的基本语法如下:

    2024-02-26
    65
  • python基础小记(Python入门笔记)

    python基础小记(Python入门笔记) Python是一种跨平台的计算机程序设计语言,是一种面向对象的动态类型语言,越来越多被用于独立的,大型项目的开发,已被逐渐广泛应用于系统管理任务的处理和Web编程。下面给大家带来一些关于Python 学习心得 ,希望对大家有所帮助。

    2023-11-03
    88
  • 利用Python defaultdict提高字典操作效率

    利用Python defaultdict提高字典操作效率
    Python字典是一种类似于映射的数据结构,由一系列键值对组成。字典中的键必须是唯一的、不可变的类型,例如字符串、整数或元组,而值可以是任意类型的Python对象。对于许多应用程序来说,Python字典是一种最方便的数据结构,它允许快速访问、插入和删除元素,并支持非常快速的查找操作。

    2024-01-09
    61
  • 频繁项集的产生及经典算法[通俗易懂]

    频繁项集的产生及经典算法[通俗易懂]前言: 关联规则是数据挖掘中最活跃的研究方法之一, 是指搜索业务系统中的所有细节或事务,找出所有能把一 组事件或数据项与另一组事件或数据项联系起来的规则,以获 得存在于数据库中的不为人知的或不能确定的

    2022-12-20
    100
  • 深入了解Python中的首字母大写函数 – capitalize()

    深入了解Python中的首字母大写函数 – capitalize()Python是一门强大的编程语言,它提供了许多内置函数,以便您轻松地操作字符串和其他数据类型。其中,capitalize()函数是一个非常有用的函数,它可以将字符串的第一个字母转换为大写,而其他字母都转换为小写。

    2024-05-06
    15
  • 优雅地结束Python for循环

    优雅地结束Python for循环a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2023-12-06
    60
  • elasticsearch7.5.0+kibana-7.5.0+cerebro[通俗易懂]

    elasticsearch7.5.0+kibana-7.5.0+cerebro[通俗易懂]elasticsearch7.5.0+kibana-7.5.0+cerebro-0.8.5集群生产环境安装配置及通过elasticsearch-migration工具做新老集群数据迁移

    2022-12-28
    103

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注