【发布时间】:2015-05-20 12:20:24
【问题描述】:
我正在查看Instagram blog post about sharded ID generation。这篇博文描述了生成 64 位标识符。他们的机制将 64 位中的 41 位分配给毫秒时间戳,他们说:
- 41 位以毫秒为单位的时间(为我们提供 41 年的自定义纪元 ID)
这是一个错字吗?我计算出你可以在 41 位中存储 69 年的毫秒时间戳。方法如下:
- 以 41 位存储的最大毫秒数:(2^41)-1 = 2199023255551 毫秒
- 除以 (1000 * 60 * 60 * 24 * 365 ) 毫秒/年 = 69 年
那么,我哪里错了?
【问题讨论】:
-
你的数学检查出来了,所以要么是错字,要么他们正在用这些位做一些事情,而不是你和我认为他们正在做的事情。 :-)
-
@templatetypedef 谢谢。这让我觉得自己很愚蠢/让我发疯。
-
Google
milliseconds 2199023255551,很多结果支持你的理论 -
也许他们的时代是 28 年前(在撰写本文时),他们说他们还有 41 年。 (我觉得很容易记住:纳米世纪中有 pi 秒。(精确到优于 1%)。)
-
自定义纪元如何影响这一点,为什么他们提到客户纪元,不需要减去直到纪元开始之前使用的毫秒数。
标签: math time timestamp 64-bit bit-manipulation