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

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