2.2.2 时间戳方式

这种方式下,全局序列在dble服务实例本地产生,只能生成全局唯一的ID,不能实现连续自增。
使用这种方式需要对应字段为bigint来保证63位(63位的原因是Java没有无符号整数类型,所以最高位恒为0,保证全局序列是个正数)
序列值是63bits的整数。整数的位模式如下:

a.29bits b.5bits c.5bits d.12bits e.12bits

其中,

  • a - e为从高位到低位。
  • a为系统当前时间戳的低41位中的高29位。
  • b为5位data center id。
  • c为5位 worker id。
  • d为12位自增长值
  • e为系统当前时间戳的低41位中的低12位。

注意事项:

  1. data center id和worker id的最大值均为31。
  2. 每毫秒时间内允许的最多序列值为4095。为了保证序列值的唯一性,在毫秒时间内请求超过4095个序列值时系统会进行等待到下一毫秒开始。
  3. 因为java没有无符号整数,实际使用41位时间戳相对于1288834974657L(2010年左右)的偏移量。
  4. 相对于偏移量的处理过够后的41位时间戳可供使用69年。

results matching ""

    No results matching ""