sharding分表后主键_分库分表主键问题 - Sharding-Jdbc

本文介绍了在分库分表场景下如何利用Sharding-JDBC的IdGenerator来解决主键重复问题。通过引入ID生成服务,确保了跨物理表的主键唯一性。在MySQL中推荐使用BIGINT类型存储生成的Long型ID。配置方法是在DataSourceConfiguration中创建CommonSelfIdGenerator的bean,并在业务代码中注入使用。
摘要由CSDN通过智能技术生成

本文参考 文章

由于分库分表,一个logic table在不同DB,不同physical table中需要实现unique的primary key。但是由于不同physical table之间对于自增ID是无感的,可能造成primary key重复。

我们需要引进ID生成服务来与底层ID生成分离。Sharding-jdbc提供主键生成器,就是一个会生成不重复Long值的类。该生成器生成的数据为64bit的long型数据,数据库中应该用大于等于64bit的数字类型的字段来保存该值,比如在MySQL中应该使用BIGINT。

依赖:

com.dangdang

sharding-jdbc-self-id-generator

${sharding-jdbc.version}

在DataSourceConfiguration.java 中创建bean.

@Bean

public IdGenerator getIdGenerator() {

return new CommonSelfIdGenerator();

}

使用IdGenerator

@RestController

@RequestMapping("/order")

public class OrderController {

@Autowired

private OrderRepository orderRepository;

@Autowired

private IdGenerator idGenerator;

@RequestMapping("/add")

public Object add() {

Order order = new Order();

order.setUserId(1L);

order.setOrderId(idGenerator.generateId().longValue());

orderRepository.save(order);

return "success";

}

@RequestMapping("query")

private Object queryAll() {

return orderRepository.findAll();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值