b站8位数uid对应时间 b站1开头uid8位数开始时间

2024-12-3101:39:36百科知识0

UidGenerator是百度基于Snowflake算法研发的唯一ID生成器的Java版本。尽管其基于广为人知的Snowflake算法,却有其独特之处:

  • 相较于Snowflake算法固定的time(41bit)、machine id(10bit)、sequence number (12bit)位设置,UidGenerator的设计赋予了这三个部分更大的灵活性,允许用户根据实际需要进行配置调整。这从下面的位数对比图中可以清晰地看出。

Snowflake算法的位设置是固定的,而UidGenerator则更为灵活。

  • 在Snowflake算法中,时间标识采用相对时间的毫秒数,而UidGenerator则采用秒作为时间单位。
  • 关于machine id(worker id)的设置,UidGenerator有一个独特的默认分配机制。每当系统启动时,它会向名为WORKER_NODE的数据库表中插入一条数据,随后获取该数据的ID作为machine id(worker id)。这里并不强制依赖MySQL数据库,同时支持自定义worker id的位数以及初始化策略,很好地支持了容器化技术。

小贴士:每次系统启动时,都会在WORKER_NODE表中新增一条记录。

值得一提的是,在此实现中遇到了一个名为FalseSharing的问题(即资源共享问题)。对此感兴趣的朋友可以上网查找相关资料。未来有机会再详细解释这个知识点,我也是第一次遇到这个概念。

若需获取相关代码及执行脚本,请从代码库中的scripts/WORKER_NODE.sql文件中获取脚本。

当您执行该脚本时,请确保在数据库中指定CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci以避免潜在编码问题。