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

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

  •  
  •   kisshere · Aug 9, 2022 · 9121 views
    This topic created in 1379 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
        1
    xieqiqiang00  
       Aug 9, 2022
    有没有可能,这不是自增 id ?
    而是类似 hash 的字符串?
    SuperXRay
        2
    SuperXRay  
       Aug 9, 2022
    为什么觉得是 int 的?
    sarices
        3
    sarices  
       Aug 9, 2022
    参考一下 美团 leaf 或者 Twitter 的雪花算法
    zonyitoo
        4
    zonyitoo  
       Aug 9, 2022   ❤️ 6
    7129539941947671076 用 16 进制表示就是 0x62f136cda3c00224 ,可以发现恰好是 8 个字节 62f1 36cd a3c0 0224 。估计只是一个普通的 64-bits ID 而已,不一定是顺序生成的,里面应该包含了信息,比如时间戳之类的。

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