什么是分库分表-02

前言

1. 什么是分库分表

2. 为什么需要分库分表

2.1 为什么需要分库呢?

2.2 为什么需要分表?

3. 如何分库分表

3.1 垂直拆分

3.2 水平拆分

3.3. 水平分库分表策略

4. 什么时候才考虑分库分表呢?

4.1 什么时候分表?

4.2 什么时候分库

5. 分库分表会导致哪些问题

5.1 事务问题

5.2 跨库关联

5.3 排序问题

5.4 分页问题

5.5 分布式ID

6. 分库分表中间件


前言

大家好,今天跟大家聊聊分库分表。

  1. 什么是分库分表

  2. 为什么需要分库分表

  3. 如何分库分表

  4. 什么时候开始考虑分库分表

  5. 分库分表会导致哪些问题

  6. 分库分表中间件简介

1. 什么是分库分表

分库:就是一个数据库分成多个数据库,部署到不同机器。

分表:就是一个数据库表分成多个表。

2. 为什么需要分库分表

2.1 为什么需要分库呢?

如果业务量剧增,数据库可能会出现性能瓶颈,这时候我们就需要考虑拆分数据库。从这几方面来看:

  • 磁盘存储

业务量剧增,MySQL单机磁盘容量会撑爆,拆成多个数据库,磁盘使用率大大降低。

  • 并发连接支撑

我们知道数据库连接是有限的。在高并发的场景下,大量请求访问数据库,MySQL单机是扛不住的!当前非常火的微服务架构出现,就是为了应对高并发。它把订单、用户、商品等不同模块,拆分成多个应用,并且把单个数据库也拆分成多个不同功能模块的数据库(订单库、用户库、商品库),以分担读写压力。

2.2 为什么需要分表?

数据量太大的话,SQL的查询就会变慢。如果一个查询SQL没命中索引,千百万数据量级别的表可能会拖垮整个数据库。

即使SQL命中了索引,如果表的数据量超过一千万的话,查询也是会明显变慢的。这是因为索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,查询就变慢啦。

小伙伴们是否还记得,MySQL的B+树的高度怎么计算的呢? 顺便复习一下吧

InnoDB存储引擎最小储存单元是页,一页大小就是16k。B+树叶子存的是数据,内部节点存的是键值+指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而再去数据页中找到需要的数据,B+树结构图如下:

假设B+树的高度为2的话,即有一个根结点和若干个叶子结点。这棵B+树的存放总记录数为=根结点指针数*单个叶子节点记录行数。

  • 如果一行记录的数据大小为1k,那么单个叶子节点可以存的记录数  =16k/1k =16.
  • 非叶子节点内存放多少指针呢?我们假设主键ID为
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

time Friend

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值