01-为什么要学习分库分表?

为什么要学习分库分表?

image.png

2019年双11成交额重要节点:

11月11日1分钟超65亿;
11月11日1分36秒,超100亿;
11月11日5分25秒,超300亿;
11月11日1小时3分59秒,超1000亿;
11月11日1小时26分07秒,成交额超1207亿;
11月11日14小时21分,成交额破2000亿;
11月11日16小时31分,成交额破2135亿;
11月11日22点28分,成交额超2500亿元;
11月12日00点00分,最终成交额2684亿元。

一分钟超65亿的话,那么也就是每秒钟1个亿的交易量,TPS>=1E

我们不妨设想下,如果采用MySQL数据库,TPS>=1E,其核心交易系统的数据库设计也是要进行分库分表的,否则根本无法支持如此大规模的高性能并发写入。

关于TPS的概念,请看我这篇文章《TPS计算方法》

那么引入我们今天要讨论的正题,分库分表。目前数据库的拆分形式,一般有两种方式比较主流。

一、数据分片

在这里插入图片描述

  • “数据分片” 通俗讲,就是把数据库服务器中的大表拆分成若干个小表(分片),这些分片可分布在单台/多台数据库服务器上。
  • 分库分表概念中的 “分片” 最小单位,指数据库中的表。



二、垂直拆分

image.png

  • 想象一下,一个数据库的数据由一整块豆腐组成。
  • 我们根据不同的场景需要(炒菜、做汤、火锅),将整块豆腐垂直切成小豆腐块,放到不同盘子里。
  • 盘子中的小豆腐块,可以理解为数据库中的“表”。
  • 最终,不同的表会根据业务需要分散存储到不同的数据库中。

image.png

图1

图1中,我们使用了垂直分库的思想,把热点业务“考试”,单独分出来一个数据库,然后把“考试”相关的表,全部拉入新数据库DB Examination中。

总体思路是,针对热点业务,可以单独的分出一个新库来进行存储,降低主库的请求压力。 后期可针对不同业务,单独分出不同的数据库。这个思路叫做垂直分库,先理解这个概念。



三、水平拆分

在这里插入图片描述

  • 开学季,某学校有很多新学生准备入学。
  • 入学后,新生会根据所在地区进行分班。
  • 假设每个班能够容纳30名学生,我们以“班级” 为单位,把众多入学的学生,通过分班算法(根据所在地区进行分班),分配到不同的班级中。
  • 班级 理解为“表”。
  • 学校 理解为“数据库”。

在这里插入图片描述

图2

图2中,我们使用了水平分表 的思想,在同一个数据库中,由于突发需求(大批量新生转院进入我校),那么会导致学生表根本无法满足现有业务需求,我们则需要对其进行水平拆分,分成多个学生表Student Table #0...#2

总体思路是,针对热点业务,在同一个数据库下,按照不同的分片算法,分出多个数据表来满足现有业务需求,降低单表的请求压力。


仔细理解上述的知识点后,聪明的同学是否还会问到,那么这两种拆分的优缺点有哪些?


四、优劣对比

在这里插入图片描述

总结,我给大家的建议是,
任何的系统架构设计,都是为了简单而稳定,不要盲目追求新技术而把事情搞复杂。


1、能垂直分库的场景,就不要考虑做水平分表。
2、必须要水平分表的话,那么能分表就不要再分库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值