2

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

 2 years ago
source link: https://www.v2ex.com/t/871587
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  kisshere · 7 小时 36 分钟前 · 4116 次点击
比如: https://www.toutiao.com/article/7129539941947671076/
难道其数据库的主键是 bigint 自增类型,该新闻在数据库中的 id 是“7129539941947671076”,可推断今日头条至少都有 7129539941947671076 篇文章了?不可能吧,那这种 id 是怎样生成的?
29 条回复    2022-08-09 14:41:33 +08:00
xieqiqiang00

xieqiqiang00      7 小时 32 分钟前

有没有可能,这不是自增 id ?
而是类似 hash 的字符串?
SuperXRay

SuperXRay      7 小时 32 分钟前

为什么觉得是 int 的?
sarices

sarices      7 小时 32 分钟前

参考一下 美团 leaf 或者 Twitter 的雪花算法
zonyitoo

zonyitoo      7 小时 30 分钟前   ❤️ 1

7129539941947671076 用 16 进制表示就是 0x62f136cda3c00224 ,可以发现恰好是 8 个字节 62f1 36cd a3c0 0224 。估计只是一个普通的 64-bits ID 而已,不一定是顺序生成的,里面应该包含了信息,比如时间戳之类的。

拍个脑袋,也许就是直接用 snowflake 生成的 :)
ily433664

ily433664      7 小时 30 分钟前

q1119145488

q1119145488      7 小时 29 分钟前

分布式 ID ,可以了解一下其中一种-雪花 id
xytest

xytest      7 小时 25 分钟前

Snowflake
nitmali

nitmali      7 小时 21 分钟前

再不济 也应该是 long 嘛
fzdwx

fzdwx      7 小时 7 分钟前

19 位,属于正常的长度。
IDAEngine

IDAEngine      7 小时 2 分钟前

Snowflake
yohole

yohole      6 小时 42 分钟前

确实,为啥 OP 会觉得是 int 啊?不解
FightPig

FightPig      6 小时 36 分钟前

这肯定不是 int 的,分布式生成的 ID 吧
xbh1794970183564

xbh1794970183564      6 小时 35 分钟前

用的是分布式生成器生成的,对应 go 中的 int64
Jooooooooo

Jooooooooo      6 小时 35 分钟前

很长的数字几乎都是雪花.
wu00

wu00      6 小时 28 分钟前

Snowflake
是顺序的
int 范围 -2147483648~2147483647
js 中 Number.MAX_VALUE=1.7976931348623157e+308 ,注意精度丢失问题
autulin

autulin      5 小时 48 分钟前 via iPhone

雪花算法+int64
realpg

realpg      5 小时 11 分钟前

@wu00 #15
你这 INT 范围是不是有点武断了
wu00

wu00      5 小时 5 分钟前

@realpg 按你这个说法,我觉得“武断”这个词用的不太准确,应该用“草率”
WhateverYouLike

WhateverYouLike      4 小时 36 分钟前 via Android

@wu00 前两天写 js 就遇到了,丢精度
beordle

beordle      3 小时 51 分钟前

如果是数字的话,实际上你可以使用数字爬取到全部文章了,这是一个严重的安全漏洞。那么利用它,要不他不存在。你不妨试一试。
meteor957

meteor957      3 小时 50 分钟前

是 char 吧
yujinchn

yujinchn      3 小时 40 分钟前

明显不是自带的自增 id 啊
mengyx

mengyx      3 小时 29 分钟前 via Android

分布式 ID 生成器,基于时间、机器 ID 、序号等生成的 int64 ,类似的可以看看 Snowflake
vace

vace      3 小时 11 分钟前

随便打开一个列表页面,在控制台输入下面的代码,就能获取到 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      3 小时 5 分钟前

正好我司去年底数据库表 id 使用了雪花算法,生成的 id 就是随机一大串
xiaoliu926

xiaoliu926      3 小时 3 分钟前

可以肯定地说这就是数据库表的主键 id. Long 型
xuelu520

xuelu520      2 小时 37 分钟前

百度雪花算法。一个不规则 ID 生成算法。现在大部分都用的这个吧,简单高效,轮子也多。
Akitora

Akitora      2 小时 31 分钟前

肯定不是连续的,推特也是这样,估计也有反爬虫的考量

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK