shardingsphere-jdbc 水平分表学习记录( 三 )


分表分库的规则思考最开始的时候对于分库分表无脑两个都用了MOD, 但因为分区数和分表数是一样的(都是2).所以mod 2数据的分布也是一样的,这就导致了sharding_test_0user_1是没有数据的,sharding_test_1user_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/

推荐阅读