回复
聊聊 Sharding-JDBC 分库分表(五)
love374
发布于 2022-7-12 17:07
浏览
0收藏
数据库中的数据如下:
product_db1
product_db2
“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9532 获取!”
4. 水平分表
经过水平分库后,性能得到了提升,但是经过一段时间后,商品的单表数据量急剧增长,查询非常慢,那么此时就需要对单表进行水平拆分了,如下图:
水平分表
同样需要在Sharding-JDBC中配置分表的规则,如下:
#分表策略,如何将一个逻辑表映射为多个实际表
spring.shardingsphere.sharding.tables.<逻辑表名称>.table‐strategy.<分片策略>.<分片策略属性名>=
实际的配置如下:
spring:
# Sharding-JDBC的配置
shardingsphere:
# 分片的配置
sharding:
# 表的分片策略
tables:
product_base:
# 数据节点配置,采用Groovy表达式,分库分表策略,这样是4个节点,ds1.product_base_$_1/ds1.product_base_$_2/ds2.product_base_$_1/ds2.product_base_$_2
actual-data-nodes: ds$->{1..2}.product_base_$->{1..2}
# 分表策略
table‐strategy:
inline:
# 分片键为店铺ID
sharding‐column: shop_id
# 分片策略取模
algorithm‐expression: product_base_$->{shop_id%2+1}
product_description:
# 数据节点配置,采用Groovy表达式
actual-data-nodes: ds$->{1..2}.product_description_$->{1..2}
table‐strategy:
inline:
sharding‐column: shop_id
algorithm‐expression: product_description_$->{shop_id%2+1}
这里需要注意的是:由于这里用了分库分表,那么数据节点一定要配置对,比如 ds$->{1..2}.product_base_$->{1..2} 这里的表达式分别对应的是4个数据节点,如下:
- ds1.product_base_1
- ds1.product_base_2
- ds2.product_base_1
- ds2.product_base_2
“由于篇幅有限,完整的配置看源码”
单元测试如下:
@Test
public void test4(){
for (int i = 0; i < 10; i++) {
Product product = Product.builder()
.name("Spring Cloud Alibaba实战课程")
.price(159L)
.originAddress("码猿技术专栏")
.shopId((long)(new Random().nextInt(100)+1))
.build();
productMapper.insertProductBase(product);
productMapper.insertProductDescribe(product.getProductId(),"内容",product.getShopId());
}
}
“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9532 获取!”
总结
本篇文章主要介绍了Sharding-JDBC 分库分表实战基础内容,通过详细的案例和代码演示希望能帮助大家更好的理解。
文章转自公众号:码猿技术专栏
标签
已于2022-7-12 17:07:32修改
赞
收藏
回复
相关推荐