V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ppllss
V2EX  ›  问与答

数据库主键是直接用雪花算法还是自增主键

  •  1
     
  •   ppllss · 2023-06-16 09:42:56 +08:00 · 1660 次点击
    这是一个创建于 521 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家是一般怎么考虑的?直接梭哈雪花算法,为以后的分库分表做无缝切换。
    还是等业务量起来要用到分库分表了,才开始用雪花算法

    还有大家业务表一般都必然会有什么字段?
    比如 create_by update_by create_time update_time 这些?

    ps 还是说用到分布式的唯一 id 中间件 比如 tinyid ?
    iblessyou
        1
    iblessyou  
       2023-06-16 10:08:37 +08:00
    使用雪花 id 或 uuid 作为 Mysql 主键,被老板怼了一顿!
    https://mp.weixin.qq.com/s?__biz=MzkyMjI2MTkxOQ==&mid=2247486882&idx=1&sn=def61010aaf44428bd4152d55ec09153

    昨天我微信刚被推了这么个文,我还以为你是转这个来的
    IDAEngine
        2
    IDAEngine  
       2023-06-16 10:09:02 +08:00
    自增就行了,业务量不大没必要
    ppllss
        3
    ppllss  
    OP
       2023-06-16 10:11:47 +08:00
    @iblessyou 🤣
    burymme11
        4
    burymme11  
       2023-06-16 10:25:58 +08:00   ❤️ 3
    个人建议,
    这份业务数据在 1 年内会出产生大量数据,大概率需要做分库分表的话,直接一开始就上分布式 ID 。
    如果不是,就自增 ID 先用着,等到时候了再分库分表改造,还能算自己的项目优化提升,加点 KPI ,绩效。
    千万别一步到位,更别想一步到位,给自己,给后面的人,都留口饭吃。
    ppllss
        5
    ppllss  
    OP
       2023-06-16 10:28:14 +08:00
    @burymme11 👍 有道理
    angeloce
        6
    angeloce  
       2023-06-16 10:35:42 +08:00
    从业务最佳实践来讲, 建议用自增作为表主键,另外增加一个 uniqkey 作为业务主键。主要是除了从 MySQL 本身机制外,更需要应用层在 CUD 多种场景里的幂等防重的考虑。
    28Sv0ngQfIE7Yloe
        7
    28Sv0ngQfIE7Yloe  
       2023-06-16 11:09:05 +08:00
    一百万内的数据,自增都没啥毛病,预期几何级别增长的数据量,需要准备分布式 ID
    UUID 就是依托答辩,任何情况我都不用
    28Sv0ngQfIE7Yloe
        8
    28Sv0ngQfIE7Yloe  
       2023-06-16 11:09:51 +08:00
    另外,一般我习惯用 created_at ,感觉看起来比较顺眼
    leo97
        9
    leo97  
       2023-06-16 13:30:51 +08:00 via Android
    @Morii UUID 有啥劣势吗?
    GiftedJarvis
        10
    GiftedJarvis  
       2023-06-16 13:45:00 +08:00
    推荐 Spring Data 的命名方式: https://github.com/spring-projects/spring-data-commons/tree/main/src/main/java/org/springframework/data/annotation

    CreatedBy, CreatedDate, LastModifiedBy, LastModifiedDate
    28Sv0ngQfIE7Yloe
        11
    28Sv0ngQfIE7Yloe  
       2023-06-16 14:36:15 +08:00
    @leo97

    没啥优势啊。小项目的时候自增很方便,大项目 uuid 又会碰撞,没有雪花好。

    目前没有遇到使用 uuid 会更好的场景
    NXzCH8fP20468ML5
        12
    NXzCH8fP20468ML5  
       2023-06-16 14:36:54 +08:00 via Android
    可以考虑 uuid_short
    mysql8 才支持
    iblessyou
        13
    iblessyou  
       2023-06-16 14:37:54 +08:00
    @ppllss 这个文应该可以很好解决你的问题了
    NXzCH8fP20468ML5
        14
    NXzCH8fP20468ML5  
       2023-06-16 14:39:27 +08:00 via Android
    @iblessyou 你这篇文章里只证明 uuid 不行,没证明雪花不行啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:33 · PVG 03:33 · LAX 11:33 · JFK 14:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.