我想为大数据生成唯一的标识符,结果是uuid。我参考了维基百科(https://en.wikipedia.org/wiki/universally_unique_identifier)对于uuid,本文提到散列冲突可能是一种可能性,并且“需要选择标识符大小和生成过程,以便在实践中这是不可能的”。
“…这些概率仅在UUID使用足够的熵生成时成立。否则,重复的概率可能会大大提高,…”。
“…如果这不可行,rfc4122建议使用名称空间变量,例如类型5 uuid。”。
我计划使用java生成uuid并引用apihttps://docs.oracle.com/javase/8/docs/api/java/util/uuid.html
维基百科:
如何设置标识符大小并选择wikipedia中指出的生成过程?
我该怎么做才能满足上面提到的“足够熵”?
有没有人可以简化一下,让我知道我应该做什么来生成最好的uuid?
1条答案
按热度按时间a8jjtwal1#
如何设置标识符大小并选择wikipedia中指出的生成过程?
什么尺寸?uuid的大小由标准指定。
我该怎么做才能满足上面提到的“足够熵”?
没有什么。只是使用
java.util.UUID
. 从文件randomUUID
:uuid是使用加密的强伪随机数生成器生成的。
如果它的加密能力很强,那么对你来说就足够了:)
嘿,如果您有疑问,只需生成一个uuid的bazzilion并检查其中是否有任何两个是相同的:)
我到底应该怎么做才能生成最好的uuid?
如果你不知道,那就用uuid版本1。但是如果需要不可预测或随机的值,那么使用uuid版本4。
还要记住,如果您需要从大量的uuid值构建数据库索引,那么最好让这些值稍微增加一些,以获得更好的插入性能—在这种情况下,uuid版本1比版本4更好。
编辑:看起来java.util.uuidapi没有提供一种简单的方法来生成版本1的uuid。希望这将有助于:
如何生成基于时间的uuid?