• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kisshere
V2EX  ›  程序员

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

  •  
  •   kisshere · Aug 9, 2022 · 9859 views
    This topic created in 1552 days ago, the information mentioned may be changed or developed.
    比如: https://www.toutiao.com/article/7129539941947671076/
    难道其数据库的主键是 bigint 自增类型,该新闻在数据库中的 id 是“7129539941947671076”,可推断今日头条至少都有 7129539941947671076 篇文章了?不可能吧,那这种 id 是怎样生成的?
    35 replies  •  2022-08-12 15:24:32 +08:00
    xieqiqiang00
    xieqiqiang00
    Aug 9, 2022
    1
    有没有可能,这不是自增 id ?
    而是类似 hash 的字符串?
    SuperXRay
    SuperXRay
    Aug 9, 2022
    2
    为什么觉得是 int 的?
    sarices
    sarices
    Aug 9, 2022
    3
    参考一下 美团 leaf 或者 Twitter 的雪花算法
    zonyitoo
    zonyitoo
    Aug 9, 2022❤️6
    4
    7129539941947671076 用 16 进制表示就是 0x62f136cda3c00224 ,可以发现恰好是 8 个字节 62f1 36cd a3c0 0224 。估计只是一个普通的 64-bits ID 而已,不一定是顺序生成的,里面应该包含了信息,比如时间戳之类的。

    拍个脑袋,也许就是直接用 snowflake 生成的 :)
    lovelive1024
    lovelive1024
    Aug 9, 2022
    5
    雪花算法
    q1119145488
    q1119145488
    Aug 9, 2022
    6
    分布式 ID ,可以了解一下其中一种-雪花 id
    byteX
    byteX
    Aug 9, 2022
    7
    Snowflake
    nitmali
    nitmali
    Aug 9, 2022
    8
    再不济 也应该是 long 嘛
    lllllliiii
    lllllliiii
    Aug 9, 2022
    9
    19 位,属于正常的长度。
    IDAEngine
    IDAEngine
    Aug 9, 2022
    10
    Snowflake
    no996
    no996
    Aug 9, 2022
    11
    确实,为啥 OP 会觉得是 int 啊?不解
    FightPig
    FightPig
    Aug 9, 2022
    12
    这肯定不是 int 的,分布式生成的 ID 吧
    xbh1794970183564
    xbh1794970183564
    Aug 9, 2022
    13
    用的是分布式生成器生成的,对应 go 中的 int64
    Jooooooooo
    Jooooooooo
    Aug 9, 2022
    14
    很长的数字几乎都是雪花.
    wu00
    wu00
    Aug 9, 2022
    15
    Snowflake
    是顺序的
    int 范围 -2147483648~2147483647
    js 中 Number.MAX_VALUE=1.7976931348623157e+308 ,注意精度丢失问题
    autulin
    autulin
    Aug 9, 2022 via iPhone
    16
    雪花算法+int64
    realpg
    realpg
    Aug 9, 2022
    17
    @wu00 #15
    你这 INT 范围是不是有点武断了
    wu00
    wu00
    Aug 9, 2022
    18
    @realpg 按你这个说法,我觉得“武断”这个词用的不太准确,应该用“草率”
    Jaufey
    Jaufey
    Aug 9, 2022 via Android
    20
    @wu00 前两天写 js 就遇到了,丢精度
    beordle
    beordle
    Aug 9, 2022
    21
    如果是数字的话,实际上你可以使用数字爬取到全部文章了,这是一个严重的安全漏洞。那么利用它,要不他不存在。你不妨试一试。
    meteor957
    meteor957
    Aug 9, 2022
    22
    是 char 吧
    yujinchn
    yujinchn
    Aug 9, 2022
    23
    明显不是自带的自增 id 啊
    mengyx
    mengyx
    Aug 9, 2022 via Android
    24
    分布式 ID 生成器,基于时间、机器 ID 、序号等生成的 int64 ,类似的可以看看 Snowflake
    vace
    vace
    Aug 9, 2022
    25
    随便打开一个列表页面,在控制台输入下面的代码,就能获取到 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
    Aug 9, 2022
    26
    正好我司去年底数据库表 id 使用了雪花算法,生成的 id 就是随机一大串
    xiaoliu926
    xiaoliu926
    Aug 9, 2022
    27
    可以肯定地说这就是数据库表的主键 id. Long 型
    xuelu520
    xuelu520
    Aug 9, 2022
    28
    百度雪花算法。一个不规则 ID 生成算法。现在大部分都用的这个吧,简单高效,轮子也多。
    Akitora
    Akitora
    Aug 9, 2022
    29
    肯定不是连续的,推特也是这样,估计也有反爬虫的考量
    unclejock
    unclejock
    Aug 9, 2022❤️1
    30
    你为什么觉得它是 int ?这是个很关键的问题
    victorc
    victorc
    Aug 9, 2022
    31
    int64 ,用类似雪花算法的 id 生成器生成的,字节所有的 id 都是这样产生的
    xiangyuecn
    xiangyuecn
    Aug 9, 2022
    32
    @wu00 #15 Number.MAX_SAFE_INTEGER 🐶
    wcp1231
    wcp1231
    Aug 10, 2022
    33
    也有可能 ID 是从 7129539941947671000 开始递增的,所以有可能头条只有 76 篇文章 (doge
    Konys
    Konys
    Aug 10, 2022
    34
    美团修改后的雪花算法,不是自增+1 的,但是确实是不断向前增大的,我记得是美团有专门的服务器用来生成这个 id ,其他项目请求这个服务器获取 id ,大概是这么个意思,很久之前看的美团的技术文章
    symons
    symons
    Aug 12, 2022
    35
    1. 这种 id 是不可遍历的自增的 id
    2. 服务端存储用 big int
    3. 跟前端交互用 string ,否则会丢精度
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1222 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 15:53 · PVG 23:53 · LAX 07:53 · JFK 10:53
    ♥ Do have faith in what you're doing.