分片带来的主键唯一问题
当一个表的数据被切分到多个表的时候,那么单表的唯一主键就无法通过数据库来控制了,因为需要保证同一个表在多个真实表的主键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
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: