聊聊 Sharding-JDBC 分库分表(五)

love374
发布于 2022-7-12 17:07
浏览
0收藏

 

数据库中的数据如下:

聊聊 Sharding-JDBC 分库分表(五)-鸿蒙开发者社区

 product_db1

聊聊 Sharding-JDBC 分库分表(五)-鸿蒙开发者社区
 product_db2

“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9532 获取!”

 

4. 水平分表
经过水平分库后,性能得到了提升,但是经过一段时间后,商品的单表数据量急剧增长,查询非常慢,那么此时就需要对单表进行水平拆分了,如下图:

聊聊 Sharding-JDBC 分库分表(五)-鸿蒙开发者社区

 水平分表

同样需要在Sharding-JDBC中配置分表的规则,如下:

#分表策略,如何将一个逻辑表映射为多个实际表 
spring.shardingsphere.sharding.tables.<逻辑表名称>.table‐strategy.<分片策略>.<分片策略属性名>=
  • 1.
  • 2.

实际的配置如下:

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}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

这里需要注意的是:由于这里用了分库分表,那么数据节点一定要配置对,比如 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());
        }
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9532 获取!”


总结
本篇文章主要介绍了Sharding-JDBC 分库分表实战基础内容,通过详细的案例和代码演示希望能帮助大家更好的理解。

 

文章转自公众号:码猿技术专栏

标签
已于2022-7-12 17:07:32修改
收藏
回复
举报


回复
    相关推荐