# 第10节:实现和使用分库分表

作者:小傅哥
博客:https://bugstack.cn (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

图 1-1

那么,这样的一个数据库路由设计要包括哪些技术知识点呢?