分库分表的id生成方式
第一种,维护一个含有自增主键的单表。
创建一个全局唯一的含有自增主键的单表。
在操作分库分表之前,先将数据插入到单表里,生成主键,再操作分库分表。
优点:简单
缺点:会有性能瓶颈,比如不支持高并发操作。
第二种 uuid
UUID.randomUUID().toString();
优点:简单易用,一行代码可以保证这个数据的唯一性。
缺点:太长了,并不适合做主键。
第三种 业务字段 + 系统当前时间
如生成订单号:时间戳 + 用户id + 业务id
第四种 snowflake
64位id
id 表示:
0 10111001010011001000101001111111011011110 00001 00001 000000000001
2020-06-09 20:36:29 第一个机房的第一台机器在这一毫秒内的第一个请求。
位 | 1bit | 41bit | 5bit | 5bit | 12bit |
---|---|---|---|---|---|
含义 | 1为负数,0为正数 | 时间戳(单位毫秒)对应的二进制 | 机房id | 机器id | 当前毫秒内该机房该机器产生的请求次数 |
举例 | 0 | 1591706189534 对应的二进制:10111001010011001000101001111111011011110 | 00001 | 00001 | 000000000001 |