The net is vast
プログラミングや、コンピュータなどの備忘録です。 主にRuby, Java, Linux, 等を扱います。アルゴリズムも扱いたいな。
22:20

java.util.UUIDの落とし穴

Category: By jx
JavaでUUIDを生成するためにはjava.util.UUIDを使用する事ができる。簡単に使うためには以下のようにすれば良い。
String uuid = UUID.randomUUID().toString();
だけれども、これで生成されるものをよく知らないと行けないので、その前にUUIDについて調べてみました。

UUIDについて

UUID と Perl について - daily dayflowerによると、UUIDには5つあります。引用です。
VersionDescription
1時刻とノードをベースに一意値を算出
2POSIX UID を埋め込んだ DCE Security バージョン*2
3ある名前空間に属するユニークな値から MD5 により一意値を算出
4完全ランダム
5ある名前空間に属するユニークな値から SHA-1 により一意値を算出
このうち、複数のマシンで実行したときに最もユニークになる確率が高いものはバージョン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をつかうというのも手ですね。もし、ほかに何か手があるようでしたら教えてください。
 

0 comments so far.

Something to say?