并发与高并发(二十三)高并发之数据库切库分库分表思路

前言

数据库为什么要切库?如何切库?

主体概要

  • 数据库瓶颈
  • 数据库切库
  • 数据库的分表

主体内容

一、数据库瓶颈

  • 单个数据库数据量太大(1-2T):多个库
  • 单个数据库服务器压力太大,读写瓶颈:多个库
  • 单个表数据量过大:分表

二、数据库切库和分库

现在大型的系统在数据库层面大多采用了读写分离技术,就是一个主库,多个从库。主库主要负责数据更新和实时数据的查询,从库负责的就是非实时数据的查询。因为在实际情况下,数据库大多是读多写少的。而读取数据通常耗时比较长,占用服务器CPU时间也较多,从而影响用户体验。我们通常做法就是将查询从主库中抽取出来,从而多个从库使用负载均衡,减轻每个从库的查询压力。采用“读写分离”的目标就是减轻主库的压力,又可以把用户查询数据的请求分发到不同的从库上,把数据源动态的置入到程序中,让指定的程序选择连接操作主库还是连接从库进行操作。这里用到的技术主要是注解,SpringAOP等等。

主从切库可以参考:https://www.jianshu.com/p/7c3ab519ceed

这里我们说一下“多数据源(切库)”与“分库”的比较区别:

它们都是底层是多个数据库在提供服务。

分库是属于在微服务应用拆分的时候都有自己的数据库,而多数据源是在没有进行应用拆分的时候就已经分成两个库了,根据业务使用不同的代码连接不同的数据库。

分库可参考:http://www.imooc.com/article/25256
https://www.cnblogs.com/shamo89/p/10032390.html

三、数据库的分表

1.什么时候考虑分表?

当一个数据表很大,大到我们做了sql和索引优化之后,基本操作的速度还是影响使用,我们就必须考虑分表了。

2.分表策略

(1)横向分表

将表中不同的数据行按照一定规律分布到不同的数据库表中(这些表保存在同一个数据库中),这样来降低单表数据量,优化查询性能,其中表结构是一样的。

(2)纵向分表

一般根据数据的活跃度进行划分。比如对于博客系统,它对于作者标题之类变化频率慢的数据(冷数据),而博客的访问量,点赞数之类(活跃数据)

(3)mybatis分表插件shardbatis2.0

这个插件的使用我们可以参考https://www.cnblogs.com/shamo89/p/10033349.html

原文地址:https://www.cnblogs.com/xusp/p/12740802.html