侧边栏壁纸
博主头像
Johnny博主等级

学无先后,达者为师

  • 累计撰写 11 篇文章
  • 累计创建 4 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

成都核酸检测系统崩溃引发的分库分表

Johnny
2022-09-03 / 0 评论 / 0 点赞 / 30 阅读 / 1,005 字

成都核酸检测系统崩溃引发的分库分表

​ 昨天的成都核酸检测系统出现问题,导致很多人排了几个小时的队做核酸。之后我的一个朋友发来了一张核酸系统崩溃原因的分析图。里面主要还是使分布式架构时数据库只有一个节点导致panic。因为还没开始学数据库的系统结构所以就查了一下分库分表的相关问题,待以后回头来看看。

数据库瓶颈

  • IO瓶颈

    • 磁盘读IO瓶颈:热点数据太多,数据库缓存放不下,每次进行查询时会产生大量的IO ->分库和垂直分表
    • 网络IO瓶颈: 网络带宽不够 ->分库
  • CPU瓶颈

    • SQL问题,当sql语句中含有一些非索引字段条件查询的时候,会增加CPU的运算量,导致CPU的使用量增加 -> SQL优化
    • 单表数据量太大,查询时扫描行太多,SQL效率低 ->水平分表 (此次事件就是这个问题)

分库分表

分表

垂直分表

表中字段较多,一般将不常用的、数据较大、长度较长的拆分到“扩展表”。一般情况加表的字段可能用几百列,此时是按照字段进行竖直切。

彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表)

水平分表

单表的数据量太大。按照某种规则(RANGE,HASH取模等),切分到多张表里面去。 但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈。这种情况是不建议使用的,因为数据量是逐渐增加的,当数据量增加到一定的程度还需要再进行切分。比较麻烦。

分库

垂直分库

一个数据库的表太多。此时就会按照一定业务逻辑进行垂直切,比如用户相关的表放在一个数据库里,订单相关的表放在一个数据库里。注意此时不同的数据库应该存放在不同的服务器上,此时磁盘空间、内存、TPS等等都会得到解决。

水平分库

水平分库理论上切分起来是比较麻烦的,它是指将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。 水平分库分表能够有效的缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源等的瓶颈。

分库分表之后的问题

1、联合查询困难

联合查询不仅困难,而且可以说是不可能,因为两个相关联的表可能会分布在不同的数据库,不同的服务器中。

2、需要支持事务

分库分表后,就需要支持分布式事务了。数据库本身为我们提供了事务管理功能,但是分库分表之后就不适用了。如果我们自己编程协调事务,代码方面就又开始了麻烦。

3、跨库join困难

分库分表后表之间的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表, 结果原本一次查询能够完成的业务,可能需要多次查询才能完成。 我们可以使用全局表,所有库都拷贝一份。

4、结果合并麻烦

比如我们购买了商品,订单表可能进行了拆分等等,此时结果合并就比较困难。

0

评论区