大厂面试题:分库分表的底层逻辑是啥?

本文深入探讨了分库分表的概念、原因及如何实施,包括分库分表的原因(如并发连接支撑、数据量增长),分库分表的策略(垂直拆分、水平拆分及混合策略),以及何时开始考虑分库分表。同时,文章提到了分库分表带来的挑战,如事务问题、跨库关联和分页问题,并介绍了几种流行的分库分表中间件。
摘要由CSDN通过智能技术生成

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

  1. 什么是分库分表

  2. 为什么需要分库分表

  3. 如何分库分表?

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

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

  6. 分库分表中间件简介

1. 什么是分库分表

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

编辑切换为居中

添加图片注释,不超过 140 字(可选)

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

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2. 为什么需要分库分表

2.1 为什么需要分库呢?

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

  • 磁盘存储

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

  • 并发连接支撑

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

2.2 为什么需要分表?

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

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

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

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

​</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值