2.2.2 时间戳方式
这种方式下,全局序列在dble服务实例本地产生,只能生成全局唯一的ID,不能实现连续自增。
使用这种方式需要对应字段为bigint来保证63位(63位的原因是Java没有无符号整数类型,所以最高位恒为0,保证全局序列是个正数)
序列值是63bits的整数。整数的位模式如下:
a.29bits | b.10bits | c.12bits | d.12bits |
其中,
- a - e为从高位到低位。
- a为系统当前时间戳的低41位中的高29位。
- b为10位instance id,使用bootstrap.cnf的instanceId
- c为12位自增长值
- d为系统当前时间戳的低41位中的低12位。
注意事项:
- bootstrap.cnf的instanceId的最大值均为1023。
- 每毫秒时间内允许的最多序列值为4095。为了保证序列值的唯一性,在毫秒时间内请求超过4095个序列值时系统会进行等待到下一毫秒开始。
- 因为java没有无符号整数,实际使用41位时间戳相对于1288834974657L(2010年左右)的偏移量。
- 相对于偏移量的处理过够后的41位时间戳可供使用69年。