V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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?

  •  1
     
  •   Vimax · 115 天前 · 4042 次点击
    这是一个创建于 115 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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