今日头条这种超长 int id 是怎么生成的?

2022-08-09 09:36:56 +08:00
 kisshere
比如: https://www.toutiao.com/article/7129539941947671076/
难道其数据库的主键是 bigint 自增类型,该新闻在数据库中的 id 是“7129539941947671076”,可推断今日头条至少都有 7129539941947671076 篇文章了?不可能吧,那这种 id 是怎样生成的?
7715 次点击
所在节点    程序员
35 条回复
xieqiqiang00
2022-08-09 09:40:29 +08:00
有没有可能,这不是自增 id ?
而是类似 hash 的字符串?
SuperXRay
2022-08-09 09:40:49 +08:00
为什么觉得是 int 的?
sarices
2022-08-09 09:40:59 +08:00
参考一下 美团 leaf 或者 Twitter 的雪花算法
zonyitoo
2022-08-09 09:42:44 +08:00
7129539941947671076 用 16 进制表示就是 0x62f136cda3c00224 ,可以发现恰好是 8 个字节 62f1 36cd a3c0 0224 。估计只是一个普通的 64-bits ID 而已,不一定是顺序生成的,里面应该包含了信息,比如时间戳之类的。

拍个脑袋,也许就是直接用 snowflake 生成的 :)
ily433664
2022-08-09 09:43:05 +08:00
雪花算法
q1119145488
2022-08-09 09:43:34 +08:00
分布式 ID ,可以了解一下其中一种-雪花 id
xytest
2022-08-09 09:47:47 +08:00
Snowflake
nitmali
2022-08-09 09:51:30 +08:00
再不济 也应该是 long 嘛
fzdwx
2022-08-09 10:05:32 +08:00
19 位,属于正常的长度。
IDAEngine
2022-08-09 10:10:30 +08:00
Snowflake
yohole
2022-08-09 10:30:29 +08:00
确实,为啥 OP 会觉得是 int 啊?不解
FightPig
2022-08-09 10:36:24 +08:00
这肯定不是 int 的,分布式生成的 ID 吧
xbh1794970183564
2022-08-09 10:38:05 +08:00
用的是分布式生成器生成的,对应 go 中的 int64
Jooooooooo
2022-08-09 10:38:14 +08:00
很长的数字几乎都是雪花.
wu00
2022-08-09 10:44:49 +08:00
Snowflake
是顺序的
int 范围 -2147483648~2147483647
js 中 Number.MAX_VALUE=1.7976931348623157e+308 ,注意精度丢失问题
autulin
2022-08-09 11:25:21 +08:00
雪花算法+int64
realpg
2022-08-09 12:01:45 +08:00
@wu00 #15
你这 INT 范围是不是有点武断了
wu00
2022-08-09 12:08:00 +08:00
@realpg 按你这个说法,我觉得“武断”这个词用的不太准确,应该用“草率”
infun
2022-08-09 12:15:11 +08:00
WhateverYouLike
2022-08-09 12:37:19 +08:00
@wu00 前两天写 js 就遇到了,丢精度

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871587

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX