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
fiypig
V2EX  ›  MySQL

关于唯一标识问题

  •  
  •   fiypig · 2020-10-16 20:55:23 +08:00 · 3545 次点击
    这是一个创建于 1509 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如一个 User 表 , 这唯一标识是用自增 ID,还是账号, 还是 UUID 呢.

    我的话会想用自增 ID, 但面试官说用 UUID, 自增 ID 在大并发注册的时候会产生性能问题.

    而我原先的项目架构是用账号的.

    麻烦大佬解答下...

    18 条回复    2020-10-16 23:51:58 +08:00
    netnr
        1
    netnr  
       2020-10-16 20:57:43 +08:00
    业务系统,用 UUID ,更灵活,没保存前就拿到 ID,导入导出方便
    crystom
        2
    crystom  
       2020-10-16 20:58:24 +08:00   ❤️ 1
    注册用户都大并发那就太厉害了
    fiypig
        3
    fiypig  
    OP
       2020-10-16 21:04:09 +08:00
    @netnr 还有分表的话, 是不是也用 UUID 呢

    @crystom 难道我记错了..
    yrj
        4
    yrj  
       2020-10-16 21:33:31 +08:00 via iPad
    如果注册量大到连自增 id 都不行,那应该有专业 dba 去解决问题了。可以试试雪花算法
    opengps
        5
    opengps  
       2020-10-16 21:37:44 +08:00 via Android
    上来就自增 id 有性能问题,这思维局限也是没谁了。
    反例:我 64 个库,每个库分别 1 ~ 63 设计,都 64 步长,分库自增还不够?那我来个 1024 个库共同完成呢?
    qa2080639
        6
    qa2080639  
       2020-10-16 21:38:31 +08:00 via Android
    有多少个平台大到注册都得考虑高并发。果然是面试造火箭
    beidounanxizi
        7
    beidounanxizi  
       2020-10-16 21:51:22 +08:00   ❤️ 1
    面试官是 SX,uuid 会有性能问题 page split 去看看高性能 MySQL 吧
    mscststs
        8
    mscststs  
       2020-10-16 22:19:14 +08:00
    user 表考虑并发的性能问题,你们是要给沙子编号吗?
    eric
        9
    eric  
       2020-10-16 22:29:22 +08:00
    MySQL 不要用 UUID 当主键。
    hooopo
        10
    hooopo  
       2020-10-16 22:36:49 +08:00 via Android
    面这种问题的面试官
    fiypig
        11
    fiypig  
    OP
       2020-10-16 22:45:40 +08:00
    @yrj 我去了解下雪花算法

    @opengps 哈哈哈, 我好迷啊

    @qa2080639 这只是个假设的吧

    @beidounanxizi 好的 , 这个我要好好查查

    @mscststs 假设的啦

    @eric 好的, 我知道了,但是我也要去了解看看是什么原因

    @hooopo 可能看我太菜了把, 没啥问题问的, 不过也感激这次面试,有些问题勾起我的兴趣啊...
    hooopo
        12
    hooopo  
       2020-10-16 22:48:25 +08:00 via Android
    @opengps 哟 自增 id 又没问题了?
    Mitt
        13
    Mitt  
       2020-10-16 22:48:49 +08:00
    自增 ID 再有性能问题也不适用于 User 表啊,User 都并发注册成这样了,考虑的就不是表的问题而是恶意注册了吧
    fiypig
        14
    fiypig  
    OP
       2020-10-16 22:55:55 +08:00
    @Mitt 我没提恶意注册这块,直接带过问其他问题了...
    Leigg
        15
    Leigg  
       2020-10-16 23:35:30 +08:00 via Android
    考虑这个问题也太极端了,多高的并发才会关注到这个性能影响? uuid 作为主键的缺点楼主先查查,我怎么感觉你是个刚毕业学生?
    by73
        16
    by73  
       2020-10-16 23:40:12 +08:00   ❤️ 1
    UUID 确实不太适合作为主键,原因很简单,太长了。。另外如果是自增的话,在并发场景所有线程都需要同步访问上一个值,肯定会有性能损失的。

    目前分布式的算法,一般都是基于时间戳,让每个线程不同步也能生成一个自增且概率上尽可能唯一的值。
    sapocaly
        17
    sapocaly  
       2020-10-16 23:43:10 +08:00
    屠龙的话:单独的 uuid service,cache 好按此 sharding,sharding table 就用 integer.
    可以参考:https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c
    fiypig
        18
    fiypig  
    OP
       2020-10-16 23:51:58 +08:00
    @Leigg 哈哈哈 , 主要我太菜了, 而且 UUID 也完全没接触过...

    @by73 懂了 大佬


    @sapocaly 好的,谢谢啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1091 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:37 · PVG 06:37 · LAX 14:37 · JFK 17:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.