我知道一些生成唯一标识符的方法:
第一种 Naive 方法只是在数据库列上添加自动增量,但它不提供分布式环境中的唯一性。
第二种方法是使用中央数据库仅生成唯一 ID,但我认为它不会扩展那么多
第三种方法是对给定的 URL 进行哈希处理并生成它的哈希值,但是它会占用更多空间,而且如果我采用前面的部分,也很有可能发生冲突。
现在众所周知的方法是使用像Twitter雪花这样的东西,它包含了epoch、worker和sequencer的良好混合,它的扩展性很好,但它不能解决短标识符的问题。我能做的就是生成一个 base64 字符串并再次获取它的前面部分,我遇到了碰撞问题。
你们是否处理过类似的短唯一 ID 生成问题(假设长度不超过 8 个字符)?如果是,那么您过去或将来解决此类问题的方法是什么?我为我的链接缩短器应用程序尝试了上述所有方法,但它没有给我满意的结果。
无论使用何种编程语言,各种回复都将受到欢迎。
给予:
........tttttttt (timetsamp)
......cc........ (collision counter)
nnnnnn.......... (node id)
产生 8 字节值:
0xnnnnnncctttttttt
可以存储在
Int64
中。
然后您可以将 8 个字节转换为 8 个字符。
如果你愿意使用Unicode,你可以把它分成4个“字符”。