Javaのグローバル一意IDについて---UUID
ユニバーサルユニーク識別コード(Universally Unique Identifier,UUID)は、ソフトウェア構築の標準であり、フリーソフトウェア財団(Open Software Foundation,OSF)の組織である分散コンピューティング環境(Distributed Computing Environment,DCE)分野の一部でもある.
UUIDの目的は,分散型システムのすべての要素に,中央制御端を介して識別情報の指定を行うことなく,一意の識別情報を持たせることである.これにより、誰もが他の人と衝突しないUUIDを確立することができる.このような場合、リポジトリの作成時の名前の重複を考慮する必要はありません.現在最も広く応用されているUUID、すなわちマイクロソフトのMicrosoft's Globally Unique Identifiers(GUIDs)であり、その他の重要な応用はLinux ext 2/ext 3アーカイブシステム、LUKS暗号化分割領域、GNOME、KDE、Mac OS Xなどである.また、e 2 fsprogsスイートのUUIDライブラリで実作を見つけることもできます.
[編集]1組のUUIDを定義し、16ビットメタグループ(16バイト、または128ビットメタとも呼ばれる)の一連の16進ビット数から構成されるので、UUID理論上の総数は216 x 8=2128であり、約3.4 x 1038に等しい.すなわち,ナノ秒ごとに1兆個のUUIDが発生すると,すべてのUUIDを使い切るのに100億年かかる.
UUIDの標準型式は32個の16進位数字を含み、ハイフンで8-4-4-12の32文字の形で5段に分かれている.例;
550 e 8400−e 29 b−41 d 4−a 716−446655440000 UUIDもまた、同類を示すために意図的に繰り返してもよい.例えばマイクロソフトのCOMでは、IUnknownを表すUUIDを生成するために、すべての素子がIUnknownインターフェースを実装しなければならない.プログラムが構成部品のIUnknownインタフェースにアクセスしようとする場合でも、実際にIUnknownインタフェースとして使用される構成部品でも、IUnknownが使用されると、同じID:00000000-00000-2000-C 00000-00000-046に参照されます.
[編集]ランダムUIDの繰返し確率ランダムに生成されたUUID(例えばjava.util.UUIDカテゴリによって生成された)の128ビットのうち、122ビットがランダムに生成され、4ビットがこのバージョン('Randomly generated UUID')で使用され、2つがそのバリエーション('Leach-Salz')で使用される.誕生日パラドックスを用いて,2つのUUIDが同じ値を持つ確率は約
以下は、x=2212でnペンUUIDを算出して衝突する確率である.
n確率
68,719,476,736 = 236
0.0000000000000004 (4 x 10-16)
2,199,023,255,552 = 241
0.0000000000004 (4 x 10-13)
70,368,744,177,664 = 246
0.0000000004 (4 x 10-10)
隕石に当たる確率と比較すると、1人が毎年隕石に当たる確率は170億分の1と推定されることが知られている[1].つまり確率は約0.0000000億6(6 x 10-11)であり、1年以内に数十兆ペンのUUIDを構築して1回繰り返すことに等しい.言い換えれば、毎秒10億件のUUIDが発生し、100年後に1回しか繰り返されない確率は50%である.地球上に1人あたり6億件のUUIDがあれば、一度に繰り返す確率は50%だ.
重複UUIDが発生してエラーが発生する場合は非常に低いため、この問題を考慮する必要はない.
確率も乱数発生器の品質に関係する.繰返し確率の向上を避けるには,暗号学に基づいた擬似乱数発生器を用いて値を生成しなければならない.
ウィキペディアhttp://zh.wikipedia.org/zh/UUID
UUIDの目的は,分散型システムのすべての要素に,中央制御端を介して識別情報の指定を行うことなく,一意の識別情報を持たせることである.これにより、誰もが他の人と衝突しないUUIDを確立することができる.このような場合、リポジトリの作成時の名前の重複を考慮する必要はありません.現在最も広く応用されているUUID、すなわちマイクロソフトのMicrosoft's Globally Unique Identifiers(GUIDs)であり、その他の重要な応用はLinux ext 2/ext 3アーカイブシステム、LUKS暗号化分割領域、GNOME、KDE、Mac OS Xなどである.また、e 2 fsprogsスイートのUUIDライブラリで実作を見つけることもできます.
[編集]1組のUUIDを定義し、16ビットメタグループ(16バイト、または128ビットメタとも呼ばれる)の一連の16進ビット数から構成されるので、UUID理論上の総数は216 x 8=2128であり、約3.4 x 1038に等しい.すなわち,ナノ秒ごとに1兆個のUUIDが発生すると,すべてのUUIDを使い切るのに100億年かかる.
UUIDの標準型式は32個の16進位数字を含み、ハイフンで8-4-4-12の32文字の形で5段に分かれている.例;
550 e 8400−e 29 b−41 d 4−a 716−446655440000 UUIDもまた、同類を示すために意図的に繰り返してもよい.例えばマイクロソフトのCOMでは、IUnknownを表すUUIDを生成するために、すべての素子がIUnknownインターフェースを実装しなければならない.プログラムが構成部品のIUnknownインタフェースにアクセスしようとする場合でも、実際にIUnknownインタフェースとして使用される構成部品でも、IUnknownが使用されると、同じID:00000000-00000-2000-C 00000-00000-046に参照されます.
[編集]ランダムUIDの繰返し確率ランダムに生成されたUUID(例えばjava.util.UUIDカテゴリによって生成された)の128ビットのうち、122ビットがランダムに生成され、4ビットがこのバージョン('Randomly generated UUID')で使用され、2つがそのバリエーション('Leach-Salz')で使用される.誕生日パラドックスを用いて,2つのUUIDが同じ値を持つ確率は約
以下は、x=2212でnペンUUIDを算出して衝突する確率である.
n確率
68,719,476,736 = 236
0.0000000000000004 (4 x 10-16)
2,199,023,255,552 = 241
0.0000000000004 (4 x 10-13)
70,368,744,177,664 = 246
0.0000000004 (4 x 10-10)
隕石に当たる確率と比較すると、1人が毎年隕石に当たる確率は170億分の1と推定されることが知られている[1].つまり確率は約0.0000000億6(6 x 10-11)であり、1年以内に数十兆ペンのUUIDを構築して1回繰り返すことに等しい.言い換えれば、毎秒10億件のUUIDが発生し、100年後に1回しか繰り返されない確率は50%である.地球上に1人あたり6億件のUUIDがあれば、一度に繰り返す確率は50%だ.
重複UUIDが発生してエラーが発生する場合は非常に低いため、この問題を考慮する必要はない.
確率も乱数発生器の品質に関係する.繰返し確率の向上を避けるには,暗号学に基づいた擬似乱数発生器を用いて値を生成しなければならない.
ウィキペディアhttp://zh.wikipedia.org/zh/UUID
package nick.kane.aboutuuid;
import java.util.*;
public class UseUUID
{
/**
* A demo of getting UUID
* @param args
*/
public static void main(String[] args)
{
System.out.println(UseUUID.getUUID());
}
/**
* @return get a UUID by java.util.UUID
*/
public static String getUUID()
{
return UUID.randomUUID().toString();
}
}