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

2022-08-09 09:36:56 +08:00
kisshere  kisshere
比如: https://www.toutiao.com/article/7129539941947671076/
难道其数据库的主键是 bigint 自增类型,该新闻在数据库中的 id 是“7129539941947671076”,可推断今日头条至少都有 7129539941947671076 篇文章了?不可能吧,那这种 id 是怎样生成的?
8153 次点击
所在节点   程序员  程序员
35 条回复
beordle
beordle
2022-08-09 13:22:04 +08:00
如果是数字的话,实际上你可以使用数字爬取到全部文章了,这是一个严重的安全漏洞。那么利用它,要不他不存在。你不妨试一试。
meteor957
meteor957
2022-08-09 13:23:09 +08:00
是 char 吧
yujinchn
yujinchn
2022-08-09 13:33:02 +08:00
明显不是自带的自增 id 啊
mengyx
mengyx
2022-08-09 13:43:47 +08:00
分布式 ID 生成器,基于时间、机器 ID 、序号等生成的 int64 ,类似的可以看看 Snowflake
vace
vace
2022-08-09 14:02:07 +08:00
随便打开一个列表页面,在控制台输入下面的代码,就能获取到 64bit 的 snowflake ID 列表了。

```js
$$('.title').map(t => t.href).filter(Boolean).map(t => t.match(/\/(\d+)\//)?.[1]).map(t => t && BigInt(t).toString(2))
```
xiaoliu926
xiaoliu926
2022-08-09 14:08:01 +08:00
正好我司去年底数据库表 id 使用了雪花算法,生成的 id 就是随机一大串
xiaoliu926
xiaoliu926
2022-08-09 14:09:46 +08:00
可以肯定地说这就是数据库表的主键 id. Long 型
xuelu520
xuelu520
2022-08-09 14:35:37 +08:00
百度雪花算法。一个不规则 ID 生成算法。现在大部分都用的这个吧,简单高效,轮子也多。
Akitora
Akitora
2022-08-09 14:41:33 +08:00
肯定不是连续的,推特也是这样,估计也有反爬虫的考量
unclejock
unclejock
2022-08-09 18:26:25 +08:00
你为什么觉得它是 int ?这是个很关键的问题
victorc
victorc
2022-08-09 21:59:23 +08:00
int64 ,用类似雪花算法的 id 生成器生成的,字节所有的 id 都是这样产生的
xiangyuecn
xiangyuecn
2022-08-09 22:04:39 +08:00
@wu00 #15 Number.MAX_SAFE_INTEGER 🐶
wcp1231
wcp1231
2022-08-10 09:54:30 +08:00
也有可能 ID 是从 7129539941947671000 开始递增的,所以有可能头条只有 76 篇文章 (doge
Konys
Konys
2022-08-10 11:12:59 +08:00
美团修改后的雪花算法,不是自增+1 的,但是确实是不断向前增大的,我记得是美团有专门的服务器用来生成这个 id ,其他项目请求这个服务器获取 id ,大概是这么个意思,很久之前看的美团的技术文章
symons
symons
2022-08-12 15:24:32 +08:00
1. 这种 id 是不可遍历的自增的 id
2. 服务端存储用 big int
3. 跟前端交互用 string ,否则会丢精度

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

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

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

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

© 2021 V2EX