分表分库的规则思考最开始的时候对于分库分表无脑两个都用了MOD, 但因为分区数和分表数是一样的(都是2).所以mod 2数据的分布也是一样的,这就导致了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/
推荐阅读
- 三谷424洗发水成分表_三谷进化论424洗发水成分表
- R7 5800U核显相当于什么显卡_R7 5800U核显什么水平
- 天玑1100相当于骁龙多少处理器_天玑1100相当于骁龙什么水平
- 天玑810相当于什么处理器_天玑810处理器什么水平
- 骁龙870什么水平_骁龙870相当于什么水平
- rx6600xt显卡相当于什么n卡_rx6600xt显卡什么水平
- 小米11的相机怎么样_小米11的相机什么水平
- 骁龙662是什么水平_骁龙662处理器性能怎么样
- 分享一个Vue实现图片水平瀑布流的插件
- R7 5800U相当于英特尔哪款处理器_R7 5800U相当于英特尔什么水平