在分布式环境中生成类似(AboU8N)的短唯一密钥的方法?

问题描述 投票:0回答:1

我知道一些生成唯一标识符的方法:

第一种 Naive 方法只是在数据库列上添加自动增量,但它不提供分布式环境中的唯一性。

第二种方法是使用中央数据库仅生成唯一 ID,但我认为它不会扩展那么多

第三种方法是对给定的 URL 进行哈希处理并生成它的哈希值,但是它会占用更多空间,而且如果我采用前面的部分,也很有可能发生冲突。

现在众所周知的方法是使用像Twitter雪花这样的东西,它包含了epoch、worker和sequencer的良好混合,它的扩展性很好,但它不能解决短标识符的问题。我能做的就是生成一个 base64 字符串并再次获取它的前面部分,我遇到了碰撞问题。

你们是否处理过类似的短唯一 ID 生成问题(假设长度不超过 8 个字符)?如果是,那么您过去或将来解决此类问题的方法是什么?我为我的链接缩短器应用程序尝试了上述所有方法,但它没有给我满意的结果。

无论使用何种编程语言,各种回复都将受到欢迎。

random uuid guid uniqueidentifier
1个回答
0
投票
  • 毫秒精度的 4 字节时间戳
  • 1 字节冲突计数器,以防您生成 ID 的速度超过每毫秒 1 个
  • 3字节节点id(允许224-1 = 1600万用户)

给予:

........tttttttt  (timetsamp)
......cc........  (collision counter)
nnnnnn..........  (node id)

产生 8 字节值:

0xnnnnnncctttttttt  

可以存储在

Int64
中。

然后您可以将 8 个字节转换为 8 个字符。

如果你愿意使用Unicode,你可以把它分成4个“字符”。

© www.soinside.com 2019 - 2024. All rights reserved.