2012-10-10 51 views
0

如何可以实现给定的版本1 TimeUUID甲函数增量(UUID)产生一个有效版本1 TimeUUID B其中:如何递增/递减(版本1)TimeUUID?

  1. B> A
  2. 不存在C,其中B> C>该给定版本1 TimeUUID A A

与同为递减(UUID)产生一个有效版本1 TimeUUID B其中:

  1. 乙<甲
  2. 存在着其中B <Ç<甲

回答

0

版本1 UUID测序在timestampclock sequence字段表示NO℃。时间戳是一个60位的日期标记(代表100纳秒时间增量,fwiw),时钟序列是一个14位计数器,保证在给定时钟周期内生成的uuids是唯一的。因此,您可以将v1 uuids视为74位序列号,时间戳为高阶位,时钟序列为低阶。因此,要通过一个原子地递增UUID,你只需要...

  1. 解析出时间戳和时钟域序列
  2. 增量由一个
  3. 时钟序列如果时钟序列为> = 2^^ 14,将其设置为零,并将时间戳字段加1
  4. 将字段写回到原始UUID中。

注意,步骤#1和#4稍微复杂的,因为包含时钟序列中的两个字节,也包含UUID的变体,所以你需要做一些杂耍按位的提取/只设置clockseq的14位。

要递减uuid,只需重复上述操作,除了步骤2 & 3,如果时钟顺序为零,则将其设置为2 ^^ 14-1,并将时间戳减1。

最后,如果60位时间戳超过/下溢,您将不得不自己决定要执行什么操作。考虑到0的时间戳意味着UUID是在莎士比亚结婚的时候(公元1582年)产生的,并且时间标记2 ^^ 60-1意味着它是在公元5238年你的(伟大的^^ 150)孙辈生成的。 ..我期望这不是太多的关注。