41位可以表示多少年的毫秒时间戳?
How many years of millisecond timestamps can be represented by 41 bits?
我正在查看 Instagram blog post about sharded ID generation。此博客 post 描述了生成 64 位标识符。他们的机制将 64 位中的 41 位分配给毫秒时间戳,他们说:
- 41 bits for time in milliseconds (gives us 41 years of IDs with a custom epoch)
这是打字错误吗?我计算过,你可以用 41 位存储 69 年的毫秒时间戳。方法如下:
- 41位存储的最大毫秒数:(2^41)-1 = 2199023255551 ms
- 除以 (1000 * 60 * 60 * 24 * 365 ) ms/year = 69 年
所以,我哪里错了?
你的计算没有错。
(2^41)-1 ms
== 2199023255.551 s
== 610839.7932086 hr
== 25451.65805036 days
== 69.6828 Julian years
== 69.6843 Gregorian Years
这与您的结果密切相关 (69 years
)。
但是,您 link 访问的网站确实说 41 bits
给了他们
41 years of IDs with a custom epoch
"Epoch" 在这种情况下可能指的是开始日期。鉴于该文章发表于“3 年前”,即 2012
,我们可以计算出它们的纪元是从 2012 + 41 - 69 == 1984
开始的。这个日期可能被选为 a reference.
我正在查看 Instagram blog post about sharded ID generation。此博客 post 描述了生成 64 位标识符。他们的机制将 64 位中的 41 位分配给毫秒时间戳,他们说:
- 41 bits for time in milliseconds (gives us 41 years of IDs with a custom epoch)
这是打字错误吗?我计算过,你可以用 41 位存储 69 年的毫秒时间戳。方法如下:
- 41位存储的最大毫秒数:(2^41)-1 = 2199023255551 ms
- 除以 (1000 * 60 * 60 * 24 * 365 ) ms/year = 69 年
所以,我哪里错了?
你的计算没有错。
(2^41)-1 ms
== 2199023255.551 s
== 610839.7932086 hr
== 25451.65805036 days
== 69.6828 Julian years
== 69.6843 Gregorian Years
这与您的结果密切相关 (69 years
)。
但是,您 link 访问的网站确实说 41 bits
给了他们
41 years of IDs with a custom epoch
"Epoch" 在这种情况下可能指的是开始日期。鉴于该文章发表于“3 年前”,即 2012
,我们可以计算出它们的纪元是从 2012 + 41 - 69 == 1984
开始的。这个日期可能被选为 a reference.