10亿数据如何快速插入MySQL

图片

最快的速度把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 层,性能更差。

层数最大数据量
21170 * 16 = 18720
31170 * 1170 * 16= 21902400 = 2000w
41170 * 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.mzph.cn/news/721497.shtml

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

相关文章

CMIP6数据处理方法与典型案例分析

气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响,是当前全球关注的核心议题之一。IPCC(Intergovernmental Panel on Climate Change,政府间气候变化专门委员会)的第六次评估报告明确;指出&#x…

【笔记】【电子科大 离散数学】 3.谓词逻辑

谓词引入 因为含变量的语句(例如x > 3)不是命题,无法进行逻辑推理。 为了研究简单命题句子内部的逻辑关系,我们需要对简单命题进行分解,利用个体词,谓词和量词来描述它们,并研究个体与总体…

JavaScript实现鼠标移动特效

关键代码&#xff1a; <script>document.onmousemove function (e) {// 加div节点var div document.createElement(div);div.style.width 5px;div.style.height 5px;// 加img节点var img document.createElement(img);// 将Img追加到div里面。div.appendChild(img);…

Python开发工具:pycharm使用注意事项以及设置

上一篇文章写了pycharm的安装以及运行&#xff0c;但是在安装过程中遇到了一些问题&#xff0c;接下来详细解析安装过程中遇到的问题&#xff0c;注意事项以及设置配置依赖等信息 安装遇到的问题&#xff1a; 协议许可证关闭不了&#xff1a;PyCharm安装完成后&#xff0c;打…

数据传输的同步技术包含哪些?如何高效安全传输数据?

在数字化时代&#xff0c;数据传输的同步技术对于确保信息的一致性和通信质量至关重要。本文将探讨数据传输同步技术的种类、如何实现高效安全的数据传输&#xff0c;以及企业在数据迁移中常用的几种方式。最后&#xff0c;我们将重点介绍镭速大数据迁移工具的优势。 数据传输同…

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

简单介绍AudioLM

主要介绍AudioLM&#xff0c;学习资料为知乎文章。这里只介绍核心思想和模块。 AudioLM 基本信息 AudioLM: a Language Modeling Approach to Audio Generation pdf: https://arxiv.org/pdf/2209.03143.pdf 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/637196330 模…

Elasticsearch:向量相似度计算 - 可笑的速度

作者&#xff1a;Chris Hegarty 任何向量数据库的核心都是距离函数&#xff0c;它确定两个向量的接近程度。 这些距离函数在索引和搜索期间执行多次。 当合并段或在图表中导航最近邻居时&#xff0c;大部分执行时间都花在比较向量的相似性上。 对这些距离函数进行微观优化是值…

记录一次bug

Component inside renders non-element root node that cannot be animated. 这可能导致 页面切换过度动画失败&#xff0c;导致页面空白&#xff0c;需要有一个公共根组件 放在一个根元素下面即可

STM32利用标准库编写PA0和PA4中断proteus仿真

首先先看看结果吧&#xff1a;昨天学习的是5--9或10--15引脚的中断&#xff0c;如果选择的是0到4口应该怎么办呢&#xff1f;今天就学习的这个&#xff0c;特此记录一下&#xff1a; 整个工程打包好了&#xff0c;直接下载打开就能仿真了&#xff1a; 链接&#xff1a;https:/…

「Mybatis实战九」:Mybatis的dao层开发使用 - 代理开发方式

一、前言 ​ 本文将进一步探讨在之前“「Mybatis实战八」&#xff1a;传统开发方式下的Mybatis DAO层构建”所奠定的基础之上&#xff0c;如何运用Mybatis的接口代理开发模式来优化持久层的设计与实现&#xff0c;解决上文中的问题。 二、代理开发方式简介 Mybatis提供的基于…

前端部署真的不简单

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~> 原文&#xff1a;前端部署真的不简单 - 掘金 (juejin.cn) 现在大部分的中小型公司部署前端代码都是比较简单的&#xff0c;主要步骤如下: 首先&#xff0c;通过脚手架提供的命令npm run build打包前端代码&…

【模型复现】自制数据集上复现目标检测域自适应 SSDA-YOLO

【模型复现】自制数据集上复现目标检测域自适应 SSDA-YOLO 1. 环境安装2. 数据集制作2.1 数据准备2.2 数据结构 3. 模型训练3.1 数据文件配置3.2 训练超参数配置3.3 模型训练 4. 模型验证4.1 验证超参数配置4.2 模型验证 5. 模型推理5.1 推理超参数配置5.2 模型推理 6. 踩坑记录…

【主题广范|见刊快】2024年可再生能源与智能电网国际学术会议(ICRESG 2024)

【主题广范|见刊快】2024年可再生能源与智能电网国际学术会议(ICRESG 2024) 2024 International Conference Renewable Energy and Smart Grid 本次会议汇聚了来自全球各地的专家学者&#xff0c;共同探讨可再生能源与智能电网领域的最新研究成果、技术进展和未来发展趋势。会…

数据结构.多项式加法

#include<iostream> using namespace std; int a[100][2], b[100][2], sum[100][2]; int n, m; int main() {cin >> n;//输入第一个多项式的项数for (int i 0; i < n; i){cin >> a[i][0] >> a[i][1];//分别输入系数和指数}cin >> m;//输入第…

递归学习资料

思路 例题 package 递归;public class 反向打印字符串 {public static void main(String[] args) {f("ABC",0);}static void f(String str,int n){if (nstr.length()){return;}f(str,n1);System.out.println(str.charAt(n)"");} }多路递归 递归优化 -剪枝…

建立网络防御时需要重点考虑的10个因素

互联网安全中心&#xff08;CIS&#xff09;建议企业可以从以下10个因素入手&#xff1a;资产管理、数据管理、安全配置、账户和访问控制管理、漏洞管理、日志管理、恶意软件防御、数据恢复、安全培训和事件响应。 1、资产管理 建立网络防御的第一步是制定企业资产和软件资产的…

【场景题】如何设计一个购物车功能?

本文参考文章&#xff1a;https://www.hollischuang.com/archives/6998 https://www.woshipm.com/pd/4115447.html https://zq99299.github.io/note-book/back-end-storage/01/03.html 首先我们要明白&#xff1a;购物车系统在电商系统中的角色是作为用户选购商品和最终下单的桥…

AI Icon Generator:免费的AI图标生成器,一键生成你想要的图标(附试用链接)

给大家推荐一个免费的AI图标生成器&#xff0c;只需要输入你想要生成的图标内容就可以一键生成图标&#xff0c;可以选择不同风格&#xff0c;完全免费&#xff0c;比如输入“一只在宇宙飞船上的猪&#xff01;”看看他能生成什么样的效果。 感兴趣的小伙伴快去试试吧&#xff…

C语言-两数组元素互换

#include <stdio.h> #include <string.h>//两数组元素互换 void swap(int ch1[],int ch2[],int sz) {int i 0;char ch 0;for(i 0;i < sz;i){ch ch1[i];ch1[i] ch2[i];ch2[i] ch;} } //打印数组元素 void print(int ch[],int sz) {int i 0;for(i 0;i <…