pg数据库 利用 sharding jdbc 做不分库 只分表配置 遇到的几个问题
简单介绍一下我的业务场景:
每分钟需要将传感器传回的数据入库,且要保留三年的历史数据,考虑到后来的查询效率问题,引入 Sharding JDBC 来做表的水平拆分,分担单表查询压力(为什么不做分库处理,是因为实际业务多少受到一些限制 )
问题一:
Springboot 的 autoconfiguration 中 datasource 与 shardingjdbc 的datasource 冲突,导致sharding jdbc 的datasource 注入失败
报错信息(大概是下面这样,具体记不清楚了) :
cloud not registry the bean named "dataSource" defined in ["io/shardingjdbc/……"],cause there has already existed bean named “dataSource” defined in ["org.springboot.autoconfiguratioin.……"] ……
解决办法:
在配置文件(application.yml)中设置允许 重复名称 bean 覆盖,这样让后面配置的sharding jdbc 的datasource 覆盖掉 springboot 的 autoconfiguration的datasource
spring.main.allow-bean-definition-overriding: true
,具体如下图红框
问题二
用记录的date字段中的分钟部分来做分片键,结果数据插入时候没有按照算法插入指定表
失败的解决办法:
在配置文件中,指定标准分片策略,将 precise-algorithm-class-name 属性 指向 自己重写的处理类
重写的分片策略实现:
但很可惜没有效果,没有按照策略插入指定的表,调了一会儿,时间问题,曲线救国了,以后再来拔草,也期待路过的朋友,帮我答疑解惑,感谢;
成功分片的办法:
直接人为在表中建立一个分片键(其实就是把date字段的分钟部分拆出来,单个放一个字段)
配置如下图(分片键是 shardingcolumn,分片策略是对 5 取模,因为一共拆分了 5 张表):
其实,最后的最后,在数据查询的时候出现了个低级问题,正常去查询逻辑表的时候,sql报错了。
一开始,我以为还是分片出的问题,结果后来 兜兜转转才发现,是本身sql 查询 where 条件那里 给的数据类型出错了。。。。
为了这个问题加班 不太值得。。。。
最后的最后的最后,来个三连吧,鼓励一下 工具人