1000w条数据插入mysql如何设计?

news2024/9/20 12:31:10

1. 批量插入

  • 原因:批量插入可以减少网络往返和事务处理的开销。单条插入会导致频繁的网络请求和事务提交,效率低下。
  • 做法:将多条记录一起打包插入,通常每批次插入1000到5000条数据,这样能极大地提升插入速度,避免大量单次插入带来的性能损耗。

2. 使用事务

  • 原因:每次插入默认都会自动提交事务,这会增加数据库的开销。把多次插入操作放到一个事务里,能减少提交事务的次数,从而提高插入速度。
  • 做法:将所有插入操作包裹在一个大事务里,或者根据需求分批次(如每10000条数据)进行事务提交,减少事务管理的资源开销。

3. LOAD DATA INFILE 优化

  • 原因LOAD DATA INFILE 是MySQL提供的高效数据导入方式,比普通的 INSERT 更快,尤其在导入海量数据时,性能显著提升。它能够从CSV等文件直接将数据加载到表中,省去了每条记录的解析、准备和执行时间。
  • 做法:将数据保存为文件(如CSV格式),然后通过 LOAD DATA INFILE 将文件直接导入表中。适用于数据已经存在于文件中的场景。

4. 禁用索引和自动提交(不到万不得已,别搞,不推荐)

  • 禁用索引的原因:插入大量数据时,索引会导致每次插入都需要对索引进行更新,这会显著降低性能。通过在插入前暂时禁用索引,可以避免这种额外开销,插入完成后再重新启用索引。
  • 禁用自动提交的原因:MySQL 默认情况下 autocommit 是开启的,这意味着每次插入都会立即提交事务。关闭自动提交后,可以通过手动控制事务提交,避免频繁的提交操作。
  • 做法:在插入开始前禁用索引、关闭自动提交,插入结束后再重新启用索引、开启自动提交。

5. 分批处理

  • 原因:一次性插入过多数据可能导致内存或锁竞争问题,并可能导致MySQL崩溃或性能急剧下降。分批处理数据可以平衡系统负载,避免对数据库造成压力。
  • 做法:将数据分成小批次(如每批5000条或10000条),逐批插入,确保单次操作不会占用过多资源。

6. MySQL 参数调优

  • innodb_buffer_pool_size:这个参数决定了InnoDB使用的内存大小,主要用于缓存索引和数据页。对于大批量插入操作,适当增大该值可以减少磁盘I/O,提升性能。
  • bulk_insert_buffer_size:该参数适用于MyISAM存储引擎,增大它可以优化批量插入的性能。
  • binlog:如果不需要数据恢复功能,可以暂时禁用二进制日志(binlog),这样可以避免日志记录带来的额外开销。

7. 分区表设计

  • 原因:对于超大数据表,分区表可以有效提高插入和查询性能。通过将数据按一定规则(如按日期、按范围或按哈希)分布到多个物理分区,减少单个分区的负载。
  • 做法:根据数据特性,合理设计分区策略,如按照ID范围、时间范围等进行分区,将插入操作分散到多个分区中,以减少单个分区的竞争。

8. 异步插入

  • 原因:同步插入可能会阻塞主应用程序的正常执行。异步插入可以将插入操作通过消息队列(如Kafka、RabbitMQ)异步处理,避免主线程等待插入完成。
  • 做法:将需要插入的数据先推送到消息队列,由后端独立的消费者服务进行异步批量插入。

总结:

  • 批量插入 减少网络和事务开销。
  • 事务控制 减少频繁的事务提交。
  • LOAD DATA INFILE 是导入海量数据的最快方式。
  • 禁用索引与自动提交 避免索引更新和事务管理的开销。
  • 分批处理 避免一次性插入过多数据导致性能瓶颈。
  • 调优MySQL参数 提升系统的整体插入性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习水印网络架构学习笔记

目前学习到的一些网络架构,简单整理如下。 1、END框架【嵌入器-噪声层-提取器】 HiDDeN: Hiding Data With Deep Networks. ECCV, 2018.END框架,对噪声层的设计。用可导操作模拟JPEG压缩的过程。 2、噪声层图像增强【Noise Layer】 MBRS: Enhancing R…

设计模式之外观设计模式

一、外观设计模式概念 外观模式 (Facade) 是一种结构型设计模式, 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式为复杂子系统提供了一个简单接口,并不为子系统…

[Python]案例驱动最佳入门:Python数据可视化在气候研究中的应用

在全球气候问题日益受到关注的今天,气温变化成为了科学家、政府、公众讨论的热门话题。然而,全球气温究竟是如何变化的?我们能通过数据洞察到哪些趋势?本文将通过真实模拟的气温数据,结合Python数据分析和可视化技术&a…

鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)天气应用案例

文章目录 一、布局简介二、典型布局场景三、侧边栏 SideBarContainer1、子组件2、属性3、事件 四、案例 天气应用1、UX设计2、实现分析3、主页整体实现4、具体代码 五、运行效果 一、布局简介 布局可以分为自适应布局和响应式布局,二者的介绍如下表所示。 名称简介…

828华为云征文|华为云Flexus X实例docker部署最新Appsmith社区版,搭建自己的低代码平台

828华为云征文|华为云Flexus X实例docker部署最新Appsmith社区版,搭建自己的低代码平台 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Ng…

SQL优化-MySQL Explain中出现Select tables optimized away

文章目录 前言相关解释总结 前言 今天在做SQL优化的时候,在使用explain执行SQL时,出现了以下情况: EXPLAIN SELECT m1.id from station m1 INNER JOIN site s ON m1.codes.stationcode where receivetime(SELECT MAX(m2.receivetime) FROM…

基于Tesseract_OCR识别

1、安装Tesseract Mac版本,通过Homebrew进行安装即可brew install tesseract windows版本安装 下载地址:https://digi.bib.uni-mannheim.de/tesseract/ 2、更换语言包 下载语言包 https://github.com/tesseract-ocr/tesseract 亦可参照这个 Tessera…

【CTF Reverse】XCTF GFSJ1101 Mine- Writeup(反编译+动态调试+Base58编码)

Mine- 运气怎么这么差? 原理 Base58 Base58是用于比特币(Bitcoin)中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。 相比Base64,Base58不使用数字"0",字母大写"O"&…

Linux 文件权限详解与管理

文章目录 前言一、文件权限概述1. 权限表示格式2. 权限组合值 二、查看文件权限三、修改文件所有者与所属组1. 使用 chown 修改文件所有者2. 使用 chgrp 修改文件所属组3. 添加所有者 四、修改文件权限1. 符号方式2. 八进制方式 总结 前言 在 Linux 系统中,文件权限…

React + Vite 多环境配置

1.根目录创建文件: .env.dev //测试环境 .env.development //本地环境 .env.production //正式环境 .env.uat //预发布环境 注:变量名必须使用 VITE_API 开头 2.package.json 配置: --mode 设置读取制定 .env文件 ,默认读取.en…

Windows10安装cuda11.3.0+cudnn8.5.0,以及创建conda虚拟环境(pytorch)

1、检查电脑驱动版本为561.09&#xff0c;选择cuda版本&#xff0c;下图可知cuda版本<12.6。 nvidia-smi #查看驱动版本&#xff0c;以及最大可以安装的cuda版本 2、Anaconda3-2024.06-1-Windows-x86_64.exe下载&#xff1a; 官网&#xff1a;https://www.baidu.com/link?…

研究生存指南:必备Zotero插件,让你的文献管理更轻松

在读研阶段&#xff0c;我经常面临大量文献阅读和项目研究的任务。忽略文献整理会导致后续使用时非常不便&#xff0c;查找困难且混乱。导师向我们推荐了 Zotero&#xff0c;经过亲身试用&#xff0c;我发现它非常好用&#xff01;zotero有非常多的插件&#xff0c;能够一个就满…

了解Node开发基础知识

目录 定义架构应用场景安装版本工具代码执行REPL传递参数输出全局对象 定义 Node.js 是一个基于 V8 JavaScript 引擎构建的运行时环境&#xff0c;允许你在服务器端运行 JavaScript 代码。Node.js 允许开发者使用 JavaScript 编写服务器端代码&#xff0c;实现前后端代码的统一…

安全帽识别算法、安全帽智能识别、不戴安全帽检测算法

不戴安全帽检测算法是一种基于人工智能技术&#xff0c;用于实时监测和提醒工作人员是否正确佩戴安全帽的系统。以下是对不戴安全帽检测算法的详细介绍&#xff1a; 1. 技术原理 - 数据采集与预处理&#xff1a;通过安装在施工现场或工厂车间等场所的摄像头收集图像数据&#…

HTML 盒子标签、字符实体及废弃标签介绍

目录 HTML盒子标签 div标签 span标签 字符实体 HTML注释 HTML 废弃标签介绍 关注作者微信公众号&#xff0c;开启探索更多 HTML 知识的精彩之旅。在这里&#xff0c;你将收获丰富的 HTML 专业内容&#xff0c;深入了解这一网页开发语言的奥秘&#xff0c;不断拓展你的知识…

c语言面试字符串复制

1&#xff0c;下面这个函数的打印是什么&#xff1a; #include<stdio.h> #include<string.h>int main() {char str0[5], str1[] "welcome";strcpy(str0, str1);printf("str0:%s\r\n",str0);printf("str1:%s\r\n",str1); } larkla…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21

根据状态转移表实现时序电路 描述 某同步时序电路转换表如下&#xff0c;请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 电路的接口如下图所示。 输入描述&#xff1a; input A , input clk , …

uniapp+renderJS+google map开发安卓版APP非小程序

背景需求 需要在uniapp中接入google地图,研究了一番,都没有找到合适的,现在说一下教程。 效果图 前期工作 这两点缺一不可,否则你啥也看不到。 1、电脑安装L-O-U梯 用于访问G-OO-G-LE的API或者创建google map key。 2、手机安装L-O-U梯 用于显示google地图。我就是手…

SpringCloud从零开始简单搭建 - JDK17

文章目录 SpringCloud Nacos从零开始简单搭建 - JDK17一、创建父项目二、创建子项目三、集成Nacos四、集成nacos配置中心 SpringCloud Nacos从零开始简单搭建 - JDK17 环境要求&#xff1a;JDK17、Spring Boot3、maven。 那么&#xff0c;如何从零开始搭建一个 SpringCloud …

DNS攻击频发,打造防劫持DNS需强化“数据治理”理念

数字化转型时代&#xff0c;“一物多址&#xff0c;万物互联”正依托于DNS&#xff08;域名系统&#xff09;实现&#xff0c;DNS的重要性不言而喻。然而传统DNS协议存在诸多安全隐患&#xff0c;整个明文传输过程几乎没有认证与保护&#xff0c;导致DNS报文易被篡改&#xff0…