按日期分表
这种方式通常会在表名的最后加上年月日,主要适用于按日期划分的统计数据或操作记录。在线实时展示的只有最近表中的数据,其他数据用于离线统计等。
/**
* 按天分表解析
*/
public class DaysTableNameParser implements TableNameHandler {
@Override
public String dynamicTableName(String sql, String tableName) {
String dateDay = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
return tableName + "_" + dateDay;
}
}
按id取模分表
这种方式需要一个id生成器,例如snowflake id或分布式id服务。它保证了相同id的数据都在一张表中,主要适用于保存用户基础信息,系统中的资源信息,购买记录等。当然这种分表方式扩展性较差,后期数据持续增多后需要按id大小分库再分表处理。
/**
* 按id取模分表处理器
*/
public class IdModTableNameParser implements TableNameHandler {
private Integer mod;
//使用ThreadLocal防止多线程相互影响
private static ThreadLocal<Integer> id = new ThreadLocal<Integer>();
public static void setId(Integer idValue) {
id.set(idValue);
}
Id

本文介绍了MybatisPlus的三种分表策略:按日期分表,适用于按日期划分的统计数据;按id取模分表,适用于保存用户信息和购买记录,但扩展性有限;自定义分表,表名存储在数据库中,查询时需动态获取。同时,文章提到了自定义拦截器以防止ThreadLocal的内存泄漏问题。
最低0.47元/天 解锁文章
3675

被折叠的 条评论
为什么被折叠?



