バージョン1のTimeUUIDAが有効なバージョン1のTimeUUIDBを生成する関数increment(uuid)を実装するにはどうすればよいですか。
- B> A
- B>C>AであるCは存在しません
また、バージョン1のTimeUUIDAが有効なバージョン1のTimeUUIDBを生成するdecrement(uuid)についても同じです。ここで、
- B <A
- B<C<AであるCは存在しません
バージョン1のuuidシーケンスは、タイムスタンプフィールドとクロックシーケンスフィールドに表示されます。タイムスタンプは60ビットの日付スタンプ(100ナノ秒の時間増分、fwiwを表す)であり、クロックシーケンスは、特定のクロックサイクル中に生成されたuuidが一意であることを保証する14ビットのカウンターです。したがって、v1 uuidは、タイムスタンプが上位ビットで、クロックシーケンスが下位ビットである74ビットのシーケンス番号を持っていると考えることができます。したがって、UUIDを1つアトミックにインクリメントするには、必要なのは...
ステップ#1と#4は、クロックシーケンスを含む2つのオクテットにもuuidバリアントが含まれているため、少し複雑であることに注意してください。したがって、14-だけを抽出/設定するには、ビット単位のジャグリングを少し行う必要があります。 clockseqのビット。
uuidをデクリメントするには、上記を繰り返します。ただし、手順2と3を除き、クロックシーケンスがゼロの場合は、2 ^^ 14-1に設定し、タイムスタンプを1つデクリメントします。
最後に、60ビットのタイムスタンプがオーバーフロー/アンダーフローした場合に何をしたいかを自分で決定する必要があります。タイムスタンプ0は、シェイクスピアが結婚した頃(1582 AD)にUUIDが生成されたことを意味し、タイムスタンプ2 ^^ 60-1は、5238 AD年にあなたの(great ^^ 150)孫によって生成されたことを意味します。 ..これはそれほど問題ではないと思います。