UUID命名空间和名称。如何检索它?

7
我有以下问题:我为数据库中的任何对象分配UUID。当我从任何来源获取UUID时,我需要知道对象的类型,以便可以在数据库中查询正确的表格。据我所知,UUID版本5支持命名空间,但我不确定我是否清楚地理解其含义。
是否可能将UUID与其所属的命名空间相关联,以便以后恢复它?
1个回答

2
“是否有可能将UUID与其所属的命名空间相关联以便以后恢复?”
是的,可以,请参见此文档
“但是两个不同的命名空间可能会映射到相同的哈希值,如何避免这种情况?”
这是一个问题。为了避免这种情况,您应该手动对名称进行编号(而不是对它们进行哈希处理)。然后将数字放入八位字节中的0-3。这样就可以在UUID和名称之间建立一种确定性的映射。

我猜这不是uuid5自动完成的。您需要实现uuid标准才能发生,对吗? - Stefano Borini
1
很简单:使用一个可以创建版本为5的UUID的生成器,在将UUID交给数据库之前,覆盖前四个八位字节即可。 - Aaron Digulla
显著降低UUID的UU概率。 - Gordon
1
@Gordon:更具体地说,他需要自己确保前四个八位组是唯一的。这不一定会降低唯一性,但如果不正确地执行(例如将结果与其他使用类型5的UUID来自其他系统的UUID混合在一起,并且他无法控制),则可能会增加碰撞的可能性。但是,如果您为所有应用程序使用版本5 UUID和相同的命名空间,则会发生相同的情况-这也将UUID缩减为12个八位组。 - Aaron Digulla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接