public ShardingSphereSQLException(final SQLState sqlState, final int typeOffset, final int errorCode, final String reason, final Object... messageArguments) {this(sqlState.getValue(), typeOffset, errorCode, reason, messageArguments);}public ShardingSphereSQLException(final String sqlState, final int typeOffset, final int errorCode, final String reason, final Object... messageArguments) {this.sqlState = sqlState;vendorCode = typeOffset * 10000 + errorCode;this.reason = null == reason ? null : String.format(reason, messageArguments);// missing super(resaon) here}
数据库自动生成的key不能作为route key但是分布式生成的key可以, 这个在FAQ里有, 有这个错误是刚开始配分布式key的时候配错了.
原文:
[分片] ShardingSphere 除了支持自带的分布式自增主键之外,还能否支持原生的自增主键?回答:分表分库的规则思考最开始的时候对于分库分表无脑两个都用了MOD, 但因为分区数和分表数是一样的(都是2).所以mod 2数据的分布也是一样的,这就导致了
是的,可以支持 。但原生自增主键有使用限制,即不能将原生自增主键同时作为分片键使用 。由于 ShardingSphere 并不知晓数据库的表结构,而原生自增主键是不包含在原始 SQL 中内的,因此 ShardingSphere 无法将该字段解析为分片字段 。如自增主键非分片键,则无需关注,可正常返回;若自增主键同时作为分片键使用,ShardingSphere 无法解析其分片值,导致 SQL 路由至多张表,从而影响应用的正确性 。而原生自增主键返回的前提条件是 INSERT SQL 必须最终路由至一张表,因此,面对返回多表的 INSERT SQL,自增主键则会返回零 。
sharding_test_0
的user_1
是没有数据的,sharding_test_1
的user_0
也是没有数据的.分表了个寂寞.不只是一样,其实只要分库和分表数最大公约数不为1如果无脑MOD都会有倾斜的问题.可以代码验证下:
int dbShard = 6;int tableShard = 32;Map<Tuple2<Integer, Integer>, Integer> count = new TreeMap<>();for (int i = 0; i < dbShard; i++) {for (int j = 0; j < tableShard; j++) {count.put(Tuple.tuple(i, j), 0);}}for (int i = 0; i < 100000; i++) {count.computeIfPresent(Tuple.tuple(i % dbShard, i % tableShard), (k, v) -> v + 1);}count.forEach((k,v) -> {System.out.println(k + ":" + v);});
因为前司我经手的项目用的都是分表,还没有到分库,没有意识到这个问题,也算是一点点小经验吧,要考虑下分库分表的规则组合会不会导致数据倾斜.其他还有些实践中的问题,当时没有记录把配置整对之后也不知道怎么复现了.不得不说shardingsphere-jdbc的易用性是非常高了,通俗易懂.
参考shardingsphere官网: https://shardingsphere.apache.orgshardingsphere-jdbc配置: https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/yaml-config/shardingsphere FAQ: https://shardingsphere.apache.org/document/current/cn/faq/How to get generated ID after I inserted into a new data record in database using Spring JDBCTemplate?
github page的博客原文:https://bingowith.me/2022/11/05/shardingsphere-jdbc-learn-note/
经验总结扩展阅读
- 2022江苏中职学业水平考试考生健康应试须知
- 三谷424洗发水成分表_三谷进化论424洗发水成分表
- 飞行员工资一般多少 最新薪资水平
- R7 5800U核显相当于什么显卡_R7 5800U核显什么水平
- 天玑1100相当于骁龙多少处理器_天玑1100相当于骁龙什么水平
- 天玑810相当于什么处理器_天玑810处理器什么水平
- 骁龙870什么水平_骁龙870相当于什么水平
- 退休6500元是什么水平 65到74岁养老金能有多少钱
- rx6600xt显卡相当于什么n卡_rx6600xt显卡什么水平
- 迪美露芦荟胶成分表是什么?