sharding-jdbc 按月份分表需要自己實現。需要實現兩個接口PreciseShardingAlgorithm,RangeShardingAlgorithm。並在配置文件裏添加實現路徑
如下:com.simianBook.conf.TimeShardingTableAlgorithm
那麽yml 裏的配置路徑如下
因為SimpleDateFormat 不是線程安全的需要修改為DateTimeFormatter
下面需要來編寫按單月分表的方法
我是使用sharding-jdbc 自帶的雪花算法 來生成主鍵的, 雪花算法的實現邏輯
因此我在得到分片鍵時對分片鍵進行逆推可以推出分片鍵的時間戳。再根據時間戳得到創建此條數據創建的年月進而定位到那個表位置(或者說表名)
DefaultKeyGenerator.EPOCH+(Long.valueOf(shardingKey+"")>>22)
DefaultKeyGenerator.EPOCH 表示起始時間。在雪花算法當中生成的時間戳需要減去起始時間在進行左移22位在進行或運算
sharding-jdbc 的雪花實現方法如下 版本3.0 該版本有bug 並發量低的時候生成的分片鍵始終為偶數
3.1.0 版本解決了 自己可以看壹下有什麽不同
user_201907