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