mybatis分表策略shard
来源:互联网 发布:淘宝怎么改追加评价 编辑:程序博客网 时间:2024/05/29 03:17
分表,通常在数据量大的情况下进行,当然应该先对项目的数据量进行数量级的预估,以根据不同的需求进行采用不同的分表策略。
(shard在mybatis中的配置就不多聊了,直接搜"mybatis分表"会有很多资料,大多类似)
shard原理,相当于一个过滤器,在执行sql语句之前对表名进行处理。
shard_config.xml的配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE shardingConfig PUBLIC "-//shardbatis.googlecode.com//DTD Shardbatis 2.0//EN" "http://shardbatis.googlecode.com/dtd/shardbatis-config.dtd"> <shardingConfig> <parseList> <value>com.hello.IDao.AuthLogMapper.insert</value> <value>com.hello.IDao.IdcardCacheMapper.insert</value> </parseList> <!--配置分表策略--> <strategy tableName ="auth_log" strategyClass = "com.hello.strategy.ShardStrategyImpl"/> <strategy tableName ="idcard_cache" strategyClass = "com.hello.strategy.ShardStrategyImpl"/></shardingConfig>
以上配置中,auth_log和idcard_cache两个表都采用了ShardStrategyImpl进行分表策略的处理,auth_log采用根据日期进行分表,而idcard_cache采用根据idcard的哈希值分为20个表。像参数中有hashmap之类的可以根据不同的sql进行不同的分表处理。大体思路是:根据表名,参数类别,参数值的不同采用不同的分表策略。
public class ShardStrategyImpl implements ShardStrategy {private static int idCardTbName = 20;private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");@Overridepublic String getTargetTableName(String tableName, Object arg1, String arg2) {if("auth_log".equals(tableName)){//认证记录分表策略Class<?> cla = arg1.getClass();if(cla == HashMap.class){HashMap<String,Object> hs = (HashMap<String,Object>)arg1;String date= hs.get("date").toString();String sTableName = tableName + "_" + date;return sTableName;}String sTableName = tableName + "_" + sdf.format(new Date());return sTableName;}else if("idcard_cache".equals(tableName)){//信息表分表策略Class<?> cla = arg1.getClass();if(cla == HashMap.class){HashMap<String,Object> hs = (HashMap<String,Object>)arg1;String idCard= hs.get("idCard").toString();int s = idCard.hashCode();String sTableName = tableName + "_" + Math.abs(s)%idCardTbName;System.out.println(sTableName);return sTableName;}if(cla == IdcardCache.class){IdcardCache ic = (IdcardCache)arg1;String idCard= ic.getCardNo();int s = idCard.hashCode();String sTableName = tableName + "_" + Math.abs(s)%idCardTbName;System.out.println(sTableName);return sTableName;}return tableName;}return tableName;}}
0 0
- mybatis分表策略shard
- 数据库分表策略
- 数据库分表策略
- 数据库分表策略
- mysql 分表策略
- shard
- mysql 分表,拆分策略
- 数据库分表实施策略
- mysql 分表分区策略
- mybatis的sharding分表
- myBatis根据业务分表
- java+mybatis分表路由
- 基于mybatis的shard方案(分表分库、读写分离)
- 基于mybatis的shard方案(分表分库、读写分离)
- mybatis generator 的分表插件
- Mybatis 分表插件shardbatis2.0使用
- MySQL数据库水平分表策略--一致性hash
- MySQL数据库水平分表策略--一致性hash
- 关于ButterKnife 8.4.0以后版本报空指针的使用注意事项:
- selenium之 定位以及切换frame(iframe)
- 【WEB】Sass与Compass安装与入门(二)
- swustoj(0541)
- 五bean之间的继承与依赖
- mybatis分表策略shard
- QFileDialog::getOpenFileName
- mybatis中使用in查询时的注意事项
- Android网络框架选择(Volley、OkHttp、Retrofit)
- 人生中第一次做面试官的经历与总结
- 如何上传本地文件到Github
- 校园导航系统
- Spring boot 双主键注解配置
- 数据库基础(1)关系型数据库