131个版本 (16个破坏性版本)

新版本 0.18.0 2024年8月16日
0.17.0 2024年7月8日
0.15.0-alpha.52024年3月29日
0.12.0-alpha.22023年12月26日
0.4.0 2023年3月28日

#683Rust模式

Download history 4749/week @ 2024-04-29 4270/week @ 2024-05-06 8535/week @ 2024-05-13 7881/week @ 2024-05-20 5664/week @ 2024-05-27 6081/week @ 2024-06-03 6370/week @ 2024-06-10 7625/week @ 2024-06-17 8630/week @ 2024-06-24 8787/week @ 2024-07-01 11438/week @ 2024-07-08 11254/week @ 2024-07-15 11907/week @ 2024-07-22 11678/week @ 2024-07-29 12162/week @ 2024-08-05 12624/week @ 2024-08-12

48,757 每月下载量
用于 53 个crate (4个直接使用)

MIT/Apache

16KB
155

TUID:基于时间的唯一标识符

rerun系列crate的一部分。

Latest version Documentation MIT Apache

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