avatar

目录
高并发解决方案(4):数据库切库分库分表&高可用

第17章 数据库切库分库分表思路

数据库瓶颈

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

数据库切库/分库

切库基础和实际运用:读写分离

读写分离技术,主库负责数据更新 和 实时数据查询,从库负责非实时数据查询。

如何方便进行读写分离,目前有两种方式:

  1. 动态数据源切换(切库)

    它是指程序运行时,把数据源动态的织入到程序中,让指定的程序连接主库还是从库

    自定义注解完成数据库切库

  2. 直接定义查数据源和写数据源(分库)

    直接在项目里定义两个数据库连接,一个是主库连接一个是从库连接,更新数据的时候我们读取主库连接,查询数据的时候读取从库连接

![屏幕快照 2018-11-05 下午5.26.57](20181105165724309/屏幕快照 2018-11-05 下午5.26.57.png)

切库和分库的区别

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

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

    多个数据源的轻松支持

    springboot + mybatis + 多数据源

数据库分表

什么时候考虑分表

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

分表的好处:

分表后单表的并发能力提高了,写操作效率也会提高。其次是查询一次的时间短了,数据分布在不同的文件里,磁盘的io磁盘io性能也提高了,

磁盘的读写锁影响的数据量变小,插入数据库需要重新建立的索引变少。

分表策略:

  • 横向分表

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

  • 纵向分表

    一般根据数据的活跃度进行划分(按属性,经常变化的字段和不常变化的字段可以分表)。

实际操作

mybatis分表插件shardbatis2.0

利用mybatis插件实现数据库分表

第18章 高可用手段

高可用的一些手段

![屏幕快照 2018-11-05 下午6.29.10](20181105165724309/屏幕快照 2018-11-05 下午6.29.10.png)

简谈从零开始搭建一套业务相关监控报警系统

高可用原则

  1. 系统的任何发布必须具有可回滚能力。
  2. 系统任何外部依赖必须准确衡量是否可降级,是否可无损降级,并提供降级开关。
  3. 系统对外暴露的接口必须配置好限流,限流值必须尽量准确可靠。

第19章 课程总结

知识点索引图

《Java并发编程与高并发解决方案》知识点索引

文章作者: Machine
文章链接: https://machine4869.gitee.io/2018/11/05/20181105165724309/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论