我想为大数据生成唯一标识符,最终以UUID结尾。我提到维基百科(https://en.wikipedia.org/wiki/Universally_unique_identifier)用于UUID,文章提到哈希冲突可能是概率和“需要选择标识符大小和生成过程以便这样做在实践中充分不可能“。
“......这些概率仅在使用足够的熵生成UUID时才成立。否则,重复的概率可能会显着提高,......”。
“......如果这不可行,RFC4122建议使用名称空间变体,例如类型5 UUID。”。
我计划使用Java生成UUID并引用API https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html
走过维基百科:
如何设置标识符大小并选择生成过程 正如维基百科所指出的那样?
我应该怎样做才能满足那里提到的“足够的熵”?
有人可以简化这个并让我知道我应该做些什么 生成最好的UUID?
答案 0 :(得分:2)
如何设置标识符大小并选择维基百科中指出的生成过程?
标识符大小是多少? UUID的大小由标准指定。
我应该怎么做以满足那边提到的“足够的熵”?
无。只需使用java.util.UUID
即可。来自documentation of randomUUID
:
使用加密强伪随机数生成器生成UUID。
如果它的加密性很强,那么它对你来说已经足够了:)。
嘿,如果您有疑问,只需生成一个UUID的bazzilion并检查它们中的任何两个是否相同:)
我应该做些什么来生成最好的UUID?
好吧,如果你不知道,那么使用UUID版本1.但如果你需要不可预测或随机值,那么使用UUID版本4.
另外请记住,如果您需要从很多的UUID值构建数据库索引,那么最好将这些值稍微增加以获得更好的插入性能 - UUID版本1更好在这种情况下比版本4.
编辑:看起来java.util.UUID API没有提供生成版本1 UUID的简单方法。希望这会有所帮助: