10亿数据如何快速插入MySQL

news2024/11/16 9:27:03

图片

最快的速度把10亿条数据导入到数据库,首先需要和面试官明确一下,10亿条数据什么形式存在哪里,每条数据多大,是否有序导入,是否不能重复,数据库是否是MySQL?

有如下约束

  1. 10亿条数据,每条数据 1 Kb

  2. 数据内容是非结构化的用户访问日志,需要解析后写入到数据库

  3. 数据存放在Hdfs 或 S3 分布式文件存储里

  4. 10亿条数据并不是1个大文件,而是被近似切分为100个文件,后缀标记顺序

  5. 要求有序导入,尽量不重复

  6. 数据库是 MySQL

首先考虑10亿数据写到MySQL单表可行吗?

数据库单表能支持10亿吗?

答案是不能,单表推荐的值是2000W以下。这个值怎么计算出来的呢?

MySQL索引数据结构是B+树,全量数据存储在主键索引,也就是聚簇索引的叶子结点上。B+树插入和查询的性能和B+树层数直接相关,2000W以下是3层索引,而2000w以上则可能为四层索引。

Mysql b+索引的叶子节点每页大小16K。当前每条数据正好1K,所以简单理解为每个叶子节点存储16条数据。b+索引每个非叶子节点大小也是16K,但是其只需要存储主键和指向叶子节点的指针,我们假设主键的类型是 BigInt,长度为 8 字节,而指针大小在 InnoDB 中设置为 6 字节,这样一共 14 字节,这样一个非叶子节点可以存储 16 * 1024/14=1170

也就是每个非叶子节点可关联1170个叶子节点,每个叶子节点存储16条数据。由此可得到B+树索引层数和存储数量的表格。2KW 以上 索引层数为 4 层,性能更差。

层数 最大数据量
2 1170 * 16 = 18720
3 1170 * 1170 * 16= 21902400 = 2000w
4 1170 * 1170 * 1170 * 16 = 25625808000 = 256亿

为了便于计算,我们可以设计单表容量在1KW,10亿条数据共100个表。

如何高效的写入数据库

单条写入数据库性能比较差,可以考虑批量写入数据库,批量数值动态可调整。每条1K,默认可先调整为100条批量写入。

批量数据如何保证数据同时写成功?MySQL Innodb存储引擎保证批量写入事务同时成功或失败。

写库时要支持重试,写库失败重试写入,如果重试N次后依然失败,可考虑单条写入100条到数据库,失败数据打印记录,丢弃即可。

此外写入时按照主键id顺序顺序写入可以达到最快的性能,而非主键索引的插入则不一定是顺序的,频繁地索引结构调整会导致插入性能下降。最好不创建非主键索引,或者在表创建完成后再创建索引,以保证最快的插入性能。

是否需要并发写同一个表

不能

  1. 并发写同一个表无法保证数据写入时是有序的。

  2. 提高批量插入的阈值,在一定程度上增加了插入并发度。无需再并发写入单表

MySQL存储引擎的选择

Myisam innodb有更好的插入性能,但失去了事务支持,批量插入时无法保证同时成功或失败,所以当批量插入超时或失败时,如果重试,势必对导致一些重复数据的发生。但是为了保证更快的导入速度,可以把myisam存储引擎列为计划之一。

现阶段我引用一下别人的性能测试结果:MyISAM与InnoDB对比分析

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

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

相关文章

2024新版SonarQube+JenKins+Github联动代码扫描(2)-SonarQube代码扫描

文章目录 前言一、docker方式安装sonar二、启动容器三、创建数据库四、启动sonarqube五、访问sonar六、如果访问报错-通过sonar日志定位问题七、修改密码八、汉化(看个人选择)九、扫描十、我遇到的Sonar报错以及解决办法 总结 前言 这是2024新版SonarQu…

【OpenGL编程手册08】 摄像机

一、说明 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感…

关于python函数参数传递

参数传递 在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的: 在下面的代码示例重,[1,2,3] 是 List 类型,“qayrup” 是 String 类型,而变量 a 是没有类型,它仅仅…

PyTorch深度学习实战(38)——StyleGAN详解与实现

PyTorch深度学习实战(38)——StyleGAN详解与实现 0. 前言1. StyleGAN1.1 模型介绍1.2 模型策略分析 2. 实现 StyleGAN2.1 生成图像2.2 风格迁移 小结系列链接 0. 前言 StyleGAN (Style-Generative Adversarial Networks) 是生成对抗网络 (Generative Ad…

使用AI创建令人惊叹的3D模型

老子云平台《《《《《 使内容创作者能够在一分钟内毫不费力地将文本和图像转换为引人入胜的 3D 资产。 文本转 3D 我们的文本转 3D 工具使创作者(包括那些没有 3D 经验的创作者)能够使用文本输入在短短一分钟内生成 3D 模型。 一句话生成3D模型 老子…

Day31|贪心算法1

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 无固定套路,举不出反例,就可以试试贪心。 一般解题步骤: 1.将问题分解成若干子问题 2.找出适合的贪心策略 3.求解每一个子问题的最优解 4.将局部最优解堆叠成全局最…

Unity2023.1.19_ECS_DOTS

Unity2023.1.19_ECS_DOTS 盲学-盲目的学习: 懒着自己整理就看看别人整理的吧,整合一下逻辑通了不少: DOTS/data oriented technology stack-面向数据的技术栈 ECS/Entities-Component-System Unity-Entities包 Entities提供ECS架构面向数…

C语言操作符详解(一)

一、操作符的分类 • 算术操作符&#xff1a; 、- 、* 、/ 、% • 移位操作符:<< >> • 位操作符: & | ^ • 赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^ • 单⽬操作符&#xff1a; &#xff01;、、--、&、*、、…

蓝桥杯练习系统(算法训练)ALGO-987 强力党逗志芃

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 逗志芃励志要成为强力党&#xff0c;所以他将身上所以的技能点都洗掉了重新学技能。现在我们可以了解到&#xff0c;每个技…

express+mysql+vue,从零搭建一个商城管理系统9--添加商户

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建models/shop.js二、新建routes/shop.js三、修改routes下的index.js四、添加商户总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service部分 一、新建models/shop.js models/shop.…

Python数据分析案例38——我国个人工作总收入影响因素分析

案例背景 偶然之间找到了CSFP(中国家庭追踪调查)的数据集&#xff0c;一个很全的家庭调查数据集。所以就想对大家现在最关心的工资和其影响因素做一点分析。 得到的结论还挺有价值的&#xff0c;有符合逻辑的&#xff0c;也有反直觉的。 数据来源 CFPS由北京大学中国社会科学…

element loading遮罩层添加按钮

<el-table v-loading"loadingText" element-loading-text"拼命加载中" :data"tableData" :tableColumn"tableColumn" :span-method"objectSpanMethod" border :cell-style"cellStyle" :header-cell-style"…

现代信号处理学习笔记(三)信号检测

通过观测数据判断信号是否存在&#xff0c;这一问题称为信号检测。 目录 前言 一、统计假设检验 1、信号检测的基本概念 2、信号检测理论测度 比率测度 概率测度 3、决策理论空间 二、概率密度函数与误差函数 1、概率密度函数 2、误差函数与补余误差函数 三、检测概…

第二证券|飞行汽车最大订单诞生,万亿级产业待起飞!概念股早盘大涨

开年以来&#xff0c;飞翔轿车赛道利好不断。 飞翔轿车草创公司斩获大订单 据媒体报道&#xff0c;美国飞翔轿车草创公司Alef Aeronautics表明&#xff0c;其电动笔直起降&#xff08;eVTOL&#xff09;飞翔器的预定最近创下了新纪录&#xff0c;订单量已到达2850份。埃隆马斯…

Cesium绘制带有方向的线

export const MAP_3D_BEGIN_CALC (lineStringData, geoData) > {// 画方向线map.entities.add({name: uav-tmp-line,polyline: {positions: Cesium.Cartesian3.fromDegreesArray(lineStringData),material: new Cesium.PolylineArrowMaterialProperty(Cesium.Color.RED),//…

windows下tensorflow-gpu2.5+cudn11.2+cudnn8.1环境配置

1.下载visualStidio2019&#xff08;cudn要用到&#xff09; 要下载2019版本&#xff0c;2022好像不很适配&#xff0c;cudn11.2以上的版本或许可以尝试 visualstidio官网是2022版本&#xff0c;找2019的下载Visual Studio 2019 版本 16.11 发行说明 | Microsoft Learn 勾选…

【C语言】Leetcode 206.反转链表

博主主页&#xff1a;17_Kevin-CSDN博客 收录专栏&#xff1a;《Leetcode》 题目 解决思路 思路一&#xff1a;翻转链表 struct ListNode* reverseList(struct ListNode* head) {if(head NULL){return NULL;}struct ListNode* n1 NULL,*n2 head,*n3 n2 -> next;while(…

ChatGPT Plus 如何开启插件

ChatGPT Plus 如何开启插件 购买完 ChatGPT Plus 会员之后&#xff0c;需要手动开启才能使用 GPT 的插件和 Code interpreter服务。 ​ 具体步骤如下&#xff1a; 1. 进入设置 点击左下角个人邮箱的位置&#xff0c;在弹窗中选择 Settings &Beta 2. 开启选项 在设置选…

紫光展锐T618_4G安卓核心板方案定制

紫光展锐T618核心板是一款采用纯国产化方案的高性能产品&#xff0c;搭载了开放的智能Android操作系统&#xff0c;并集成了4G网络&#xff0c;支持2.5G5G双频WIFI、蓝牙近距离无线传输技术以及GNSS无线定位技术。 展锐T618核心板应用旗舰级 DynamlQ架构 12nm 制程工艺&#x…

以线缆行业为例,工业智能网关的实际应用及其带来的变革-天拓四方

工业智能网关是一种集数据采集、传输、处理和分析于一体的智能化设备。它能够实现对工业现场各种传感器、执行器等设备的数据进行实时采集&#xff0c;并通过网络传输到云端或本地数据中心进行分析处理。同时&#xff0c;工业智能网关还具备边缘计算能力&#xff0c;能够在本地…