2012-10-10 80 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)孫輩生成的。 ..我期望這不是太多的關注。