回复
聊聊 Sharding-JDBC 分库分表(四)
love374
发布于 2022-7-12 17:07
浏览
0收藏
3、主键生成策略
Sharding-JDBC支持配置主键生成策略,比如使用雪花算法或者UUID方式,配置如下:
spring:
# Sharding-JDBC的配置
shardingsphere:
# 分片的配置
sharding:
# 表的分片策略
tables:
## product_base是逻辑表的名称
product_base:
# 主键生成策略
key-generator:
# 主键
column: product_id
# 生成算法
type: SNOWFLAKE
shop:
# 主键生成策略
key-generator:
# 主键
column: shop_id
# 生成算法
type: SNOWFLAKE
“SNOWFLAKE:雪花算法”
配置完成后,向product_base插入一条数据,将会直接插入到ds1这个数据库中,demo如下:
@Test
public void test1(){
Product product = Product.builder()
.name("Spring Cloud Alibaba实战课程")
.price(159L)
.originAddress("码猿技术专栏")
.shopId(1L)
.build();
productMapper.insertProductBase(product);
}
“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9532 获取!”
3. 水平分库
问题来了,现在有很多商家入驻,product_db单库存储数据已经超出预估,商品资源属于访问非常频繁的资源,单台服务器已经无法支撑,此时就需要对其进行水平分库,将商品库拆分成两个数据库:product_db1、product_db2,如下:
水平分库
“product_db1+product_db2数据合并则为完整的商品数据”
Sharding-JDBC 配置也很简单,只需要配置一下数据库的切分规则,配置规则如下:
#分库策略,如何将一个逻辑表映射到多个数据源
spring.shardingsphere.sharding.tables.<逻辑表名称>.database‐strategy.<分片策略>.<分片策略属性名>=
那么此时需要对product_base、product_description进行数据源切分,按照对2取模的方式,配置如下:
spring:
# Sharding-JDBC的配置
shardingsphere:
# 分片的配置
sharding:
# 表的分片策略
tables:
product_base:
database‐strategy:
inline:
## 分片键
sharding‐column: product_id
## 分片算法,内置的精确算法
algorithm‐expression: ds$->{product_id%2+1}
product_description:
database‐strategy:
inline:
## 分片键
sharding‐column: product_id
## 分片算法,内置的精确算法
algorithm‐expression: ds$->{product_id%2+1}
上述配置什么意思?
“product_id是偶数的将会存储在product_db1库中,奇数的存储在product_db2中”
测试也很简单,我们循环往数据库中插入10条商品数据,由于是雪花算法,因此应该有5条在db1库中,另外5条在db2中,单元测试如下:
@Test
public void test3(){
for (int i = 0; i < 10; i++) {
Product product = Product.builder()
.name("Spring Cloud Alibaba实战课程")
.price(159L)
.originAddress("码猿技术专栏")
.shopId(1L)
.build();
productMapper.insertProductBase(product);
productMapper.insertProductDescribe(product.getProductId(),"内容",product.getShopId());
}
}
观察下控制台的SQL,可以发现是不停的往ds1和ds2中进行插入数据,如下图:
文章转自公众号:码猿技术专栏
标签
已于2022-7-12 17:07:27修改
赞
收藏
回复
相关推荐