22:20
java.util.UUIDの落とし穴
JavaでUUIDを生成するためにはjava.util.UUIDを使用する事ができる。簡単に使うためには以下のようにすれば良い。
String uuid = UUID.randomUUID().toString();だけれども、これで生成されるものをよく知らないと行けないので、その前にUUIDについて調べてみました。
UUIDについて
UUID と Perl について - daily dayflowerによると、UUIDには5つあります。引用です。
このうち、複数のマシンで実行したときに最もユニークになる確率が高いものはバージョン1です。おそらく時代的にもそういった用途が多いのではないかと思います。
Version Description 1 時刻とノードをベースに一意値を算出 2 (POSIX UID を埋め込んだ DCE Security バージョン*2) 3 ある名前空間に属するユニークな値から MD5 により一意値を算出 4 完全ランダム 5 ある名前空間に属するユニークな値から SHA-1 により一意値を算出
java.util.UUIDの生成するUUID
これがくせ者なのですが、上記のコードで生成するUUIDのバージョンは実は1ではなくて4なのです。つまり、異なるマシンで実行すると重複する可能性がバージョン1よりも高い事になります。といっても、重複する可能性は相当低いのでしょうが、、、、じゃあ、どのようにしてバージョン1のUUIDを生成したら良いのかを調べてみました。
どうやら、JDKのJavaでversion 1は作れないようです(via Java UUID generators compared)。代わりにUUID – generate UUIDs (or GUIDs) in Javaをつかうというのも手ですね。もし、ほかに何か手があるようでしたら教えてください。
どうやら、JDKのJavaでversion 1は作れないようです(via Java UUID generators compared)。代わりにUUID – generate UUIDs (or GUIDs) in Javaをつかうというのも手ですね。もし、ほかに何か手があるようでしたら教えてください。