mysql 主键用自增 id 还是雪花 id?

2020-08-11 13:54:36 +08:00
 Vimax

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

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

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

@takemeaway #9 能按 ID 顺序爬当然直接穷举 ID 啊,数据又全又不需要管列表页,增量还方便...
xuanbg
2020-08-12 08:44:10 +08:00
有条件当然不要用数据库自增。用自增有两个坏处:
1 、id 可猜测,不对,应该是可预测。简直是为别人爬数据大开方便之门。
2 、新增数据返回 id 还得额外费手脚,写主从数据时很恶心。
xuanbg
2020-08-12 08:45:05 +08:00
@xuanbg 忘了说第三个,分表后 id 会重复……要死了
securityCoding
2020-08-12 09:51:41 +08:00
@sunmoon1983 java 的话统一配置一下序列化策略就行了

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

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

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

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

© 2021 V2EX