131个版本 (16个破坏性版本)
新版本 0.18.0 | 2024年8月16日 |
---|---|
0.17.0 | 2024年7月8日 |
0.15.0-alpha.5 | 2024年3月29日 |
0.12.0-alpha.2 | 2023年12月26日 |
0.4.0 | 2023年3月28日 |
#683 在 Rust模式
48,757 每月下载量
用于 53 个crate (4个直接使用)
16KB
155 行
TUID:基于时间的唯一标识符
是rerun
系列crate的一部分。
TUID是128位标识符,具有全局的时间顺序,并在线程之间有歧义解决。这意味着您可以将TUID用作时间序列数据库中的歧义解决。
实现
TUID基于两个字段,两者都是单调递增的
time_ns: u64
inc: u64
time_ns
是自Unix纪元以来的近似纳秒数。它是单调递增的,尽管两个紧密生成的TUID可能具有相同的time_ns
。
inc
是单调递增的整数,每个线程初始化为某个随机数。
因此,算法如下
- 对于每个线程,生成64位随机数作为
inc
- 当生成新的TUID时
- 递增线程局部
inc
- 获取当前时间作为
time_ns
- 返回
TUID { time_ns, inc }
- 递增线程局部
性能
在2022年M1 MacBook的单核上,我们可以以40百万TUID/s的速率生成TUID,即每个TUID为25纳秒。
未来工作
对于基于时间的漏洞(如Meltdown/Spectre),对于敏感系统,可能需要将time_ns
四舍五入到最接近的毫秒。可以将time_ns
的最后20位填充更多的随机数,以降低冲突的概率。
依赖
~285–780KB
~14K SLoC