# 第10节:实现和使用分库分表
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!
- 分支:210922_xfg_dbRouter (opens new window)
- 组件:db-router-spring-boot-starter (opens new window)
- 描述:开发一个基于 HashMap 核心设计原理,使用哈希散列+扰动函数的方式,把数据散列到多个库表中的组件,并验证使用。
# 零、优秀作业
- 计算数据库位置的时候,用【int dbIdx = idx / dbRouterConfig.getTbCount() + 1】为什么是【dbRouterConfig.getTbCount()】标的数量呢?@拿笔小星 (opens new window)
- 问题排查 Error creating bean with name 'db-router-point' @归斯 (opens new window)
- 实现和使用分库分表 @一点江南 (opens new window)
- DB路由组件 @L、m (opens new window)
- 实现和使用分库分表 @BerserkD (opens new window)
- 实现和使用分库分表,开发自研数据库路由 @奥斯卡最佳配角 (opens new window)
- 实现自定义路由组件,学会springboot组件开发 @杨杨得亿🙉 (opens new window)
- 这章的目的是自定义路由实现分库分表 @Chin (opens new window)
- 数据路由组件的实现和引入组件实现分库分表 @Geroge Liu (opens new window)
- 实现和使用分库分表 @liuc (opens new window)
- 通过注解实现数据分散到不同库不同表的操作 @xbhog (opens new window)
- 领取整体流程(图一)和奖品领取信息的操作流程。@xbhog (opens new window)
- 分库分表路由组件开发细节流程梳理 @爱奋斗的小鲨鱼 (opens new window)
# 一、开发日志
- 9月22日,新增数据库路由组件开发工程 db-router-spring-boot-starter 这是一个自研的分库分表组件。主要用到的技术点包括:散列算法、数据源切换、AOP切面、SpringBoot Starter 开发等
- 9月22日,完善分库中表信息,user_take_activity、user_take_activity_count、user_strategy_export_001~004,用于测试验证数据库路由组件
- 9月30日,基于Mybatis拦截器对数据库路由分表使用方式进行优化,减少用户在使用过程中需要对数据库语句进行硬编码处理
# 二、需求分析
如果要做一个数据库路由,都需要做什么技术点?
首先我们要知道为什么要用分库分表,其实就是由于业务体量较大,数据增长较快,所以需要把用户数据拆分到不同的库表中去,减轻数据库压力。
分库分表操作主要有垂直拆分和水平拆分:
- 垂直拆分:指按照业务将表进行分类,分布到不同的数据库上,这样也就将数据的压力分担到不同的库上面。最终一个数据库由很多表的构成,每个表对应着不同的业务,也就是专库专用。
- 水平拆分:如果垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。如:user_001、user_002
而本章节我们要实现的也是水平拆分的路由设计,如图 1-1
那么,这样的一个数据库路由设计要包括哪些技术知识点呢?