数据库之分库分表

2 篇文章 0 订阅
2 篇文章 0 订阅

数据库分库分表

感觉这个也是面试的时候很容易被问到的问题。分库分表,其实就是将原本存在同一台服务器上的数据库拆分到不同的服务器上。以达到扩充系统性能的目的。

对于数据拆分的思路:

  • 结构化的数据:分库分表
  • 异构数据,复杂查询的高并发架构方案:NoSQL存储(Elasticsearch,clickHouse这种)。

什么场景下要进行分库分表

首先可以对数据库进行压测,用来测试吞吐量和并发量。此外,比较通用的数据是:

  • 单表记录参考上限是 500w-1000w (感觉这个数据有点小了,应该还能更大些)
  • 单库的TPS上限:1000-1500TPS

TPS/QPS

  • QPS:每秒处理的查询数(相当于数据库的查询)
  • TPS:每秒处理的事务数(相当于数据库的写入和修改)

性能瓶颈

常见的数据库瓶颈有IO瓶颈、CPU瓶颈IO瓶颈又分为磁盘读IO和磁盘写IO

  1. 磁盘读IO瓶颈:因为热点数据较多,导致数据库缓存存放不下,这时候查询就会有大量的磁盘IO,查询速度会比较慢。同时会产生大量的活跃的连接,最终会导致无可用连接的问题
  2. 磁盘写IO瓶颈:这个不难想到,因为频繁写入,并且磁盘的写入速度低,会产生大量的活动的连接,最终导致无可用连接。
  3. CPU瓶颈:一般就是CPU占用率一直很高。
    1. 慢SQL问题:join,group by ,非索引查询。可以对SQL进行优化或者将计算量大的SQL逻辑放到应用中处理。
    2. 单表数据量大,也会导致查询时扫描太多行,占用较多CPU。

出现IO,CPU瓶颈的时候,可以先从代码,SQL,索引几个方面进行优化,如果这几个方面没有太多优化的余地,就可以考虑分库分表了

分库:将一个数据库分为多个数据库,用于提高TPS/QPS(因为单库的TPS有上限的)

分表:将一个表的数据放到多个表中。

水平拆分&&垂直拆分

水平拆分:

水平拆分就是拆分数据,不拆分结构。水平拆分把一个表的数据,拆分到多个库的多个表中,每个库的表结构都相同。所有库表加起来就是全部数据。

水平拆分的意义就是将数据均匀地存放在更多的库中,然后用多个库来扛更高的并发,另外就是用多个库的存储容量来扩容。

水平拆分的原则:

  • 让每个表中的数据记录的数据控制在一定范围内,保证SQL的性能。
  • SQL越复杂,单表数据记录数越少。

一般的预估:如果TPS是5000 ,并且单库的TPS是1000-1500,那么就需要拆分成4个库。

垂直拆分

垂直拆分就是既拆结构,也拆数据。垂直拆分就是把一个有很多字段的表从结构上拆分成多个表或者多个库,每个库表的结构都不一样。每个库表包含部分字段。

垂直拆分的原则:将较少的访问频率高的字段放在一个表里,将较多的并且访问频率很低的放在另一个表。因为查询的数据是有缓存的,访问频率高的字段数量越少,就可以在缓存中存放更多的数据,性能就越好。所以,垂直拆分的出发点就是充分利用数据库的缓存,提升性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值