使用场景
适用于单库,日志表过大的问题,如每月产生几千万条日志,还不能清理,必须存档,其它业务表反而没这么大量时,可以使用分表来解决。
可以按实际情况来决定是按年分表还是按月分表,每年产生的数据量过亿时可以按月分表。
本文使用的框架
使用spring boot 2.x + mybatis-plus + shardingjdbc5.x + druid
shardingjdbc非常坑的一个点,每个版本变一次配置,官方文档写得不清不楚,通过GITHUB找到官方示例,发现示例也很少,最后是通过网上的博文+示例+文档才搞定。
配置maven依赖
1 | <properties> |
配置数据源与shardingjdbc分表策略
按月分表使用单库,所以这里只配置一个数据源
1 | spring.shardingsphere.mode.type=Standalone |
mybatis plus的配置
1 | server: |
记得加上mybatis plus扫描注解:@MapperScan(value = "com.reiner.sharding.test.mapper")
java测试代码
控制器代码:
1 |
|
附上控制器中时间参数转换器:
1 |
|
调用http://localhost:7999/orders?startTime=2021-11-01&endTime=2021-11-30 ,shardingjdbc会自动根据参数变换表名,如startTime=2021-11-01,则查询的表名为:t_order_2021-11。
插入同理,会根据createTime字段自动选择要插入的表,同时查多个月份的数据shardingjdbc会自动查询多张表。
测试用的表结构:
1 | CREATE TABLE `db0`.`Untitled` ( |
每月创建表
这一步不能忘,shardingjdbc不会自动创建表,因此需要我们自己写一个定时任务自动按月或者年创建表,如按月则获取当前时间并取名:t_order_2021_12
下一篇将记录一下如何使用shardingjdbc分表分库。
- 本文作者: reiner
- 本文链接: https://reiner.host/posts/80ca5d35.html
- 版权声明: 转载请注明出处,并附上原文链接