一个随机的分布式 ID 实现


#软件架构与思考


实现方式

分布式ID组成:时间 + 随机串 + 自增序号。例如 20221001-891273198237-001

假设时间就是年月日。

当获取一个随机串时,要将时间和随机串存入数据库中,用下面的方式保证时间和随机串是唯一的:
数据库中时间和随机串加联合唯一索引。如果数据库中已存在,则会出现唯一索引冲突报错。此时重新生成随机串,重试即可。

自增序号,在内存中自增即可。

当自增序号用完后,再重新生成随机串。

如果希望额外再保证唯一性,可以将生成的分布式ID写入一个表中,如果出现唯一索引冲突,就意味着用过了,重新生成下。

可能的问题

在跨天时,如何处理?

比如当前的时间和随机串,自增序号还没用完,但是用着用着发现突然跨天了,此时应该用新的时间,并重新生成随机串,自增序号重新从0开始。



( 本文完 )