mysql 主键用 uuid 还是 uuid_short 好

2020-02-16 10:44:52 +08:00
 jry

mysql 主键用有序 uuid 还是 uuid_short 好,有没有明显缺陷? 有序 UUID 通过这样实现 uuidtobin ( uuid())。

5199 次点击
所在节点    MySQL
11 条回复
ebingtel
2020-02-16 10:56:36 +08:00
如果不是分布式,还是整数好呀……
jry
2020-02-16 11:04:14 +08:00
@ebingtel 考虑分布式
opengps
2020-02-16 11:12:50 +08:00
根据实际设计就好:
int 自增也不是不支持分布式,而是需要预留自增跨度,比如第一节点从 1 自增,自增步长为 32 (这里就意味着预留了 32 个数据库节点扩容空间)
uuid 是否需要有序,重点在于写入性能,采用有序是为了保证落盘顺序为“尾部追加”,这时候如果使用了时间戳列作为聚集索引,那么 id 列是否就不需要使用有序了(优缺点:浪费一个索引的空间损失,但是 id 规则会简化)
uuid_short 我没用过,大致感觉就是省了一部分索引占用的硬盘空间,查询时候也省了一点内存,会有一定的提升。
qiyuey
2020-02-16 11:39:21 +08:00
分布式生成 big int unsigned 的趋势递增 id 作为主键
wangyzj
2020-02-16 12:13:01 +08:00
@opengps 这就是答案啊
Aresxue
2020-02-16 16:13:58 +08:00
分布式 id 为什么不用推特的 snow 算法生成,uuid 的缺点太明显了
jry
2020-02-16 20:07:02 +08:00
@Aresxue 雪花算法只能用 69 年!
chenluo0429
2020-02-16 20:30:39 +08:00
@jry 可以自己决定时间戳占用的长度的,标准的是 32 个机房,每个机房 32 台机器,共 1024 台机器,每毫秒最多生成 4096 个 id,可以用 69 年。你每多挪出来 1bit,可用时间就翻一倍。
chenluo0429
2020-02-16 20:35:06 +08:00
@jry 雪花算法可以保证有效期内不会出现重复 id,但是存在时钟回拨的问题
msg7086
2020-02-17 03:27:41 +08:00
@jry 69 年以后建议重写项目(
到时候硬件软件环境都和现在截然不同了,用现在的概念去预测未来没太大用处。
Aresxue
2020-02-17 11:28:08 +08:00
@jry 你认真的?普通项目能不能活过 6.9 年都是个问题。。。

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

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

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

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

© 2021 V2EX