关于唯一标识问题

2020-10-16 20:55:23 +08:00
 fiypig

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

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

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

麻烦大佬解答下...

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

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

@opengps 哈哈哈, 我好迷啊

@qa2080639 这只是个假设的吧

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

@mscststs 假设的啦

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

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

目前分布式的算法,一般都是基于时间戳,让每个线程不同步也能生成一个自增且概率上尽可能唯一的值。
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
2020-10-16 23:51:58 +08:00
@Leigg 哈哈哈 , 主要我太菜了, 而且 UUID 也完全没接触过...

@by73 懂了 大佬


@sapocaly 好的,谢谢啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/715773

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX