› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
Vimax
V2EX  ›  MySQL

mysql 主键用自增 id 还是雪花 id?

  •  
  •   Vimax · Aug 11, 2020 · 8562 views
    This topic created in 2236 days ago, the information mentioned may be changed or developed.

    InnoDB 表的数据写入顺序能和 B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的。

    在数据表中,什么场景适合用主键 ID,什么场景适合雪花 ID ?

    25 replies  •  2020-08-12 14:21:55 +08:00
    lenqu
        1
    lenqu  
       Aug 11, 2020   ❤️ 1
    个人观点,如果表数据不存在整列删除情况,主键 id 就很合适
    wellsc
        2
    wellsc  
       Aug 11, 2020 via iPhone   ❤️ 1
    雪花也可以自增的
    ifsclimbing
        3
    ifsclimbing  
       Aug 11, 2020   ❤️ 1
    分库分表用 雪花 id 吧
    opengps
        4
    opengps  
       Aug 11, 2020   ❤️ 1
    怕爬虫规律性穷举的一定不能用自增 id
    damai0419
        5
    damai0419  
       Aug 11, 2020
    雪花是递增趋势. 不是严格递增的吧. 不分库分表,感觉没必要上分布式 id.
    wangyzj
        6
    wangyzj  
       Aug 11, 2020
    业务量不是非常巨大,主键自增足够了
    love
        7
    love  
       Aug 11, 2020
    egfegdfr
        8
    egfegdfr  
       Aug 11, 2020
    看数据的重要性吧,一些非重要的数据就直接自增了(角色、权限), 重要数据用雪花 id (用户、产品、订单、 支付流水)
    takemeaway
        9
    takemeaway  
       Aug 11, 2020
    @opengps 现在爬虫还用穷举?
    @lenqu 删除也一样合适
    qwerthhusn
        10
    qwerthhusn  
       Aug 11, 2020   ❤️ 1
    用雪花,返回 json 时还要处理下格式,不然 js 读到大数字然后精度不足导致数据不对。。。
    PopRain
        11
    PopRain  
       Aug 11, 2020
    数据库主键最大的问题是获取主键需要访问数据库,如果有主从表,比较麻烦
    cameco
        12
    cameco  
       Aug 11, 2020
    目前采用主键自增+hashids 加密(就是处理麻烦了点其它目前无感)。
    sunmoon1983
        13
    sunmoon1983  
       Aug 11, 2020
    @qwerthhusn 对,我曾经也被这个问题困扰了,用了 json-bigint 也不好使,没办法,只能在后台先把 bigint 转成字符串再返回给前端
    EminemW
        14
    EminemW  
       Aug 11, 2020 via iPhone
    一起用
    littlewing
        15
    littlewing  
       Aug 12, 2020
    主键自增+一个雪花 ID
    yidinghe
        16
    yidinghe  
    PRO
       Aug 12, 2020 via Android
    有需要 ID 严格递增的话就用自增
    locoz
        17
    locoz  
       Aug 12, 2020   ❤️ 1
    这问题在前面这个帖子( https://www.v2ex.com/t/686977 )里的文章和回复中有一堆例子,还有各种性能问题、部署问题之类的讨论,你可以看看。

    @takemeaway #9 能按 ID 顺序爬当然直接穷举 ID 啊,数据又全又不需要管列表页,增量还方便...
    xuanbg
        18
    xuanbg  
       Aug 12, 2020
    有条件当然不要用数据库自增。用自增有两个坏处:
    1 、id 可猜测,不对,应该是可预测。简直是为别人爬数据大开方便之门。
    2 、新增数据返回 id 还得额外费手脚,写主从数据时很恶心。
    xuanbg
        19
    xuanbg  
       Aug 12, 2020
    @xuanbg 忘了说第三个,分表后 id 会重复……要死了
    securityCoding
        20
    securityCoding  
       Aug 12, 2020
    @sunmoon1983 java 的话统一配置一下序列化策略就行了
    keshawnvan
        21
    keshawnvan  
       Aug 12, 2020
    分布式场景用雪花挺好的: https://juejin.im/post/6844904132550066183
    594duck
        22
    594duck  
       Aug 12, 2020
    如果不是百库百表而且要强一致没必要使用雪花 ID 吧。
    sunmoon1983
        23
    sunmoon1983  
       Aug 12, 2020
    @securityCoding 我用的 go,我不知道有没有那么 NB 的功能
    inwar
        24
    inwar  
       Aug 12, 2020 via Android
    @sunmoon1983 如果是 jackson 可以定义 Long 类型的序列化方式,直接转成 string
    yourssheng
        25
    yourssheng  
       Aug 12, 2020
    @damai0419 数据库主键也不是严格递增也会有 1,2,4,5 这种情况
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1425 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 16:36 · PVG 00:36 · LAX 09:36 · JFK 12:36
    ♥ Do have faith in what you're doing.