【教程】shardingjdbc(七)分布式序列

分片带来的主键唯一问题

当一个表的数据被切分到多个表的时候,那么单表的唯一主键就无法通过数据库来控制了,因为需要保证同一个表在多个真实表的主键id的唯一性。

注意:5.x 版本和4.x版本在配置上有略微的差别

内置解决方案

shardingjdbc内置了2种主键算法来供选择;

uuid

uuid 就是利用了jdk生成的uuid 字符串,来保证主键id 的不重复的特点

内置算法类是 UUIDKeyGenerateAlgorithm

使用方式也很简单

keyGenerateStrategy:
  column: order_id
  keyGeneratorName: uuid
keyGenerators:
  uuid:
    type: UUID

缺点:1.主键必须是 字符串类型;

        2. 主键非连续的,对于b-tree索引插入数据时,建立索引的性能比连续数据的性能比较差;

优点: 比较简单

不是很推荐的一种方式;

雪花算法

雪花算法是Twitter 开源的一种分布式序列算法。生成的是一个64bit的整数。并且生成的是根据时间连续的;

整体结构 是 时间戳 + workid 机器id + 毫秒的序列化

具体的详细介绍这里不在赘述,请自行百度或google

使用方式:

配置主键id 列,配置类型,配置属性可以配置一个work-id 也就是中间的机器id能够有效的避免重复;

keyGenerateStrategy:
  column: order_id
  keyGeneratorName: snowf
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值