伪命题之MYSQL分库分表

看到使用分库分表来解决性能问题的时候心里总是不能太理解。

 

如果同事发生大量请求的时候,损害性能的是硬盘的随机读。那么分库分表也没有对性能的瓶颈进行“分治”啊。

应该的做法是使用一块新的硬盘来创建分库。但是基本的文章都没有提到这点。而且基本上也不会有公司这么做,毕竟现在一快硬盘在1T所有,一个数据库肯定占用不了这么多地方。而且程序员在申请数据库的时候,也没有办法说明使用不同的硬盘来部署这数据库。而且也不知道部署在这些硬盘上有没有大量的随机读。

还有好多人都觉得MYSQL数据库有性能问题,在单表超过500W或者2000W的时候就要分库分表。我觉得从MYSQL的数据结构来说,应该不存在这些问题。(好多帖子说是避免树高过高。)其实树高增加一层会增加一个数量级的数据存放量。如果通过分库分表来减少树高,可以累死程序员。这也不是程序员应该考虑的。MYSQL只要缓存一个顶级节点pageCache就相当于做了“分库分表”了。所以一直认为分库分表是个伪命题。

下面使用程序来做一下实验来证明自己的想法。

在测试环境Linux系统下安装mysql 5.7.41。本地使用java 8 为客户端代码。

实验一:单表操作

1)创建数据库test

2)创建T_PERSON表

3)使用Java JDBC 批量插入100,000,000条数据,4096为一个批次。总共耗时为:2150秒

实验二:分表不分库

  1. 创建数据库T_PERSON_1, T_PERSON_2, T_PERSON_3, T_PERSON_4, T_PERSON_5, T_PERSON_6, T_PERSON_7, T_PERSON_8.
  2. 使用java JDBC批量插入100,000,000条数据,4096*8为一个批次。每张表总共12,500,000条数据(小于2000W条)。总共耗时为:2015秒。

实验三:分库分表

  1. 创建数据库Test1, Test2, Test3, Test4, Test5, Test6, Test7, Test8
  2. 每个库创建T_PERSON表
  3. 使用java JDBC批量插入100,000,000条数据,4096*8为一个批次。每张表总共12,500,000条数据(小于2000W条)。总共耗时为:2022秒。跟实验二不同的是实验三使用了3个Connection。因为是使用了三个数据库,没有办法使用相同的connection去插入。

数据库

表大小

连接数

Batch

总共插入数据

耗时时间(秒)

实验1

1

1

8.4G

1

4096

100,000,000

2150

实验2

1

8

1.1G

1

4096

100,000,000

2015

实验3

8

1

1.1G

8

4096

100,000,000

2022

实验1

Postgre

1

1

NA

1

4096

100,000,000

2339

读取实验

客户端环境,java8, spring-boot 2.6.6, sharing-sphere 3.1.0

实验一:使用上诉实验一的环境。共使用16个Connection。使用jmeter进行压力测试10 Thread,QPS 为826, 20 thread 889.

实验二:10 thread 833, 20 thread 944

实验三:10 thread 848, 20 thread 902

数据库

连接数

10 threads

20 threads

实验1

1

1

16

826

889

实验2

1

8

16

833

944

实验3

8

1

2

848

902

跟预想的是一样的,分库分表并不能提高性能。

读取实验二

客户端环境,java8,使用多线程,JDBC来测试性能。

数据库

连接数

测试结果

测试结果

实验1

1

1

8

5304.73

6086.77

实验2

1

8

8

7140.63

6467.98

实验3

8

1

8

5832.50

6614.85

实验1

1

1

16

14096.30

13497.41

实验1

1

1

24

18694.14

17823.77

实验1

1

1

32

19104.83

21274.47

也证明了分库分表不能明显提高性能,但是增加并发数可以有效的提高性能。因为mysql没有reactive的driver,就没有测试。

PS: 里面涉及大大量的取余的计算,我特意把除数都设置成2的几次幂,我以为编译器会可以帮我优化。但是查看class代码并没有进行优化。

然后又使用javac –O 测试,已经没有进行优化,不知道为什么。

问了一下ChatGPT,他就可以做出优化的解释。

也使用了一下https://www.cnblogs.com/BetterCallSaul/p/MySQL.html​​​​​​ 提到的查看树高的方法。我的数据库使用的10W的时候是2层,但是到了20W就是3层了,1亿的时候也是三层。

ps: innodb_page_size    16384 (16K)

数据量

树高

100000

2

200000

3

300000

3

100000000

3

PS: 该文章是针对网上一些MYSQL性能不好,或者单表500W或者2000W需要进行分表。或者是为了减少树高的一些观念的看法。我觉得这些观点并不应该成为分库分表的主要目的。

摘自《阿里的开发手册》 。

Mysql单表最大记录是多少_mysql单表数据量_怎么又有bug单的博客-CSDN博客mysql单表最大记录数不能超过多少?https://blog.csdn.net/GBS20200720/article/details/125344782

分库分表的目的from ChatGPT

分库分表是一种常见的数据库水平扩展方案,它的主要目的是解决单一数据库的性能瓶颈和容量限制问题,提高系统的扩展性和可用性。

在单一数据库中,当数据量增长到一定程度时,会面临性能瓶颈和容量限制的问题。而分库分表可以将数据水平拆分到多个数据库或数据表中,每个数据库或数据表只负责一部分数据的存储和查询,从而提高了数据库的性能和容量。同时,分库分表也可以增加系统的可用性,当一个数据库或数据表出现故障时,只会影响到一部分数据,其他数据库或数据表仍然可以继续工作,从而保证了系统的正常运行。

除了提高系统性能和容量,分库分表还可以提高数据库的可扩展性。随着数据量的增长,可以通过增加数据库或数据表的数量来扩展系统的容量和性能,而不需要对原有的数据库或数据表进行修改或扩展。

总之,分库分表是一种解决单一数据库性能瓶颈和容量限制问题,提高系统可用性和可扩展性的有效方式。但是,在实际使用中需要考虑数据一致性、查询路由、数据迁移等问题,需要谨慎设计和实施。

我还是觉得chat GPT的答案挺好的。分库分表肯定有用处,但是我们在使用的时候需要评价我们的场景,以及带来的优缺点,然后我们需要权衡这些优缺点。不要一味的听说要分库分表,或者觉得“分库分表” 很高级。

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

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

相关文章

论文阅读笔记:Rumor Detection on Social Media with Bi-Directional Graph Convolutional Networks

这篇论文好像是第一篇将图神经网络应用到社交媒体谣言检测的论文。 摘要 摘要中,有几个关键性的词,有助于我们从全局了解这篇paper的内容,以下: Bi-Directional:意思是“双向的”,分别指“top-down”&am…

论文报告-Linear Regression for face recognition

论文的英文题目、中文题目,作者; 英文题目 : Linear Regression for Face Recognition 中文题目 : 人脸识别的线性回归方法 作者 : Imran Naseem, Roberto Togneri, Mohammed Bennamoun 摘要翻译 本文提出了一种新的人脸识别方法,将模式识别…

论文笔记:Mind-the-Gap,Unsupervised Domain Adaptation for Text-Video Retrieval

小心空隙!文本视频检索中的无监督域自适应 摘要介绍方法总体框架Concept Preservation 结论 摘要 什么时候我们可以期望文本视频检索系统在不同于其训练域的数据集上有效地工作?在这项工作中,我们通过无监督的领域适应的视角来研究这个问题&…

“detail“: “Unsupported media type \“text/plain\“ in request.“

在使用 Postman 的过程中,使用 POST 请求传输数据时,Postman 反馈如下错误 "detail": "Unsupported media type \"text/plain\" in request." 这是由于在传输数据过程中格式选择错误的原因 只要将右下角的 Text 格式转换为…

Dual-stream Network for Visual Recognition论文记录

太长不看版:作者提出了一种DS-net,受resnet启发,设置了4个stage,分别下采样为原图的4,8,16,32倍小。每个stage中含有不同数量的block,作用是可以将输入的tensor按照channel划分为两部…

图像超分辨率论文笔记

持续更新 Progressive Multi-Scale Residual Network for Single Image Super-Resolution 论文链接:https://arxiv.org/pdf/2007.09552.pdf代码:PMRN (暂未公开)发表时间:2020.7网络结构: 1)包…

【论文笔记】Exploring Temporal Coherence for More General Video Face Forgery Detection

* Exploring Temporal Coherence for More General Video Face Forgery Detection 题目:探索更一般的视频人脸伪造检测的时间相干性 1.概述 时间相干性网络组成: 第一阶段是一个全时间卷积网络(FTCN)。FTCN的关键见解是 将空间卷…

视频超分辨率论文笔记

持续更新 Video Super-Resolution via Deep Draft-Ensemble Learning 论文链接:http://openaccess.thecvf.com/content_iccv_2015/papers/Liao_Video_Super-Resolution_via_ICCV_2015_paper.pdf代码:http://www.cse.cuhk.edu.hk/leojia/projects/DeepS…

【超分辨率】SRCNN论文笔记

论文名称:Image Super-Resolution Using Deep Convolutional Networks 论文下载地址:https://arxiv.org/pdf/1501.00092.pdf 翻译参考:https://blog.csdn.net/PPLLO_o/article/details/90040801 1.论文概述 1.SRCNN算是深度学习在图像超分辨…

版面分析:[ICCV2017] Fast CNN-based document layout analysis

论文链接:https://openaccess.thecvf.com/content_ICCV_2017_workshops/papers/w18/Oliveira_Fast_CNN-Based_Document_ICCV_2017_paper.pdf 自动文档布局分析是认知计算和从文档图像中提取信息的过程中的关键步骤,如特定领域知识数据库创建、图形和图像…

论文笔记之数据增广(1):mixup

mixup:BEYOND EMPIRICAL RISK MINIMIZATION 文章:https://arxiv.org/pdf/1710.09412.pdf 代码:github 作者:张宏毅 mixupBEYOND EMPIRICAL RISK MINIMIZATION 摘要背景 引入贡献 方法 公式理解 实验讨论 摘要 如今大规模深度…

【图像超分辨率重建】——EnhanceNet论文精读笔记

2017-EnhanceNet: Single Image Super-Resolution Through Automated Texture Synthesis(EnhanceNet) 基本信息 作者: Mehdi S. M. Sajjadi Bernhard Scholkopf Michael Hirsch 期刊: ICCV 引用: * 摘要: 单一图像超分辨率是指从…

旷视CVPR2019图卷积多标签图像识别Multi-Label Image Recognition with Graph Convolutional Networks论文详解

背景:GCN刚出来,很多很容易想到的idea会被运用起来,很容易产生一些paper。我们解析此篇论文,了解其中原理,一来看看如何将图卷积应用于目前技术上,二来看到底如何快速的把准确率刷到state of the art以便发…

Hierarchical Modular Network for Video Captioning【论文阅读】

Hierarchical Modular Network for Video Captioning 发表:CVPR 2022代码:HMNidea:现有方法在有监督学习的框架下比较生成句子与标注,没有对语义有详尽的探索。基于此,作者考虑从三个层面来连接视频特征和语义&#x…

CVPR2019超分辨率文章:Meta-SR,任意输入upsample factor的超分辨率网络

论文地址 CVPR2019的新文章,主要是针对以前超分辨率问题中需要固定上采样因子的问题作出的改进。 摘要 随着DNN的发展,超分辨率技术得到了巨大的改进。但是,超分辨率问题中的任意scale factor问题被忽视了很久。前面的很多工作都是把不同s…

GAIDC大会:飞桨邀你来大模型技术与应用论坛

深度学习大规模预训练模型的兴起,以其极强的通用能力和突破性的效果,正推动通用人工智能(AGI)快速发展,并带来了AI研发应用新范式,逐步改变AI生态格局。近期以大规模语言模型为基础的技术工作,展…

人工智能大模型多场景应用原理解析

​强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan 前言 在上篇文章《人工智能大模型之ChatGPT原理解析》中分享了一些大模型之ChatGPT的核心原理后,收到大量读者的反馈,诸如:在了解了核心原理后想进一步了解未来的发展…

3日行程安排

22号 13:30出发到峡山码头坐船--横山岛景区 峡山码头 船费:来回70r 固定开船时间:9:30,12:00,14:00 或者🈵️12人自动开船,最晚4点有船返回 岛上风景 逛山海“小普陀”寺庙普南禅院,被誉为宁…

托福备考经验心得

综述 托福备考准备经验与心得。全部都是个人的反思,带有个人的观点色彩,按需自取即可。首先是几个深刻的经验教训: 对备考的强度要有一个基本的把握,之前一方面在忙别的事情一方面备考感觉自己成效不是特别明显 (可能是我本人能…

初识托福TOEFL口语

对于想要准备托福的童鞋,并不怎么了解托福考试内容的可以看一看,本文主要给大家分享下托福考试中口语部分介绍。 托福考试中总共有4个部分,第一个部分是Reading(阅读),第二个部分是(Listening&…