之前面试遇见一题,问我 MySQL 主键 ID 将要超过 bigint 上限的时候该怎么办

2021 年 7 月 26 日
 goodboy95
实际上面试官开始没说 bigint,只说超过上限,然后我随口问了一句“是不是连 bigint 都会超过上限?”,他说是。

然后我就有点蒙了,bigint 往上好像找不到更大的整数变量了,用 string 的话性能基本不可接受。

做分库分表的话,好像是可行,不过越想越麻烦,分出来的每个表主键 ID 需要从 1 重新开始计,这样的话感觉就需要考虑根据 ID 精准查询数据的情况,是不是需要另建一个 string 列用来存数据编号,分完表之后怎样做到新旧查询方式的无缝对接之类的,不过目前能想到的也只有这种方式了。

不知道还有人能想到什么好方案吗?
4614 次点击
所在节点    问与答
23 条回复
Jooooooooo
2021 年 7 月 26 日
bigint 都超了再改造呗, 一般不考虑这种问题

其实是可以事先简单计算大概到了什么时候会超出 long 这种长度 (比如是 20 年后, 那现在就去考虑明显是过度设计

通用性和实现难读肯定是需要取舍的
leafre
2021 年 7 月 26 日
数据量乳齿大,就别往 MySQL 里塞了
Maboroshii
2021 年 7 月 26 日
提高上限!
xiangyuecn
2021 年 7 月 26 日
年薪没一个亿 就不要耽误双方时间了🐶
yor1g
2021 年 7 月 26 日
bigint 不是 100 年都跑不满么
lakehylia
2021 年 7 月 26 日
扩容改造呗
soy
2021 年 7 月 26 日
Key size 都有 2^63 * 8 = 73EB 了。这么大的数据量肯定不是 MySQL 该干的活了。BigTable 搞起!
dqzcwxb
2021 年 7 月 26 日
bigint 最大数值 9223372036854775807,每秒 1 亿条数据量新增需要跑 2924 年
这不是造火箭这么简单,这是奔着星际航行去,值得尊敬!
sytnishizuiai
2021 年 7 月 26 日
@dqzcwxb 牛逼
luckyrayyy
2021 年 7 月 26 日
他是想问分库分表吗
chenset
2021 年 7 月 26 日
@dqzcwxb 牛逼
fkdtz
2021 年 7 月 26 日
@dqzcwxb 哈哈哈,我开始好奇是哪家公司了
iceheart
2021 年 7 月 26 日
这问题,当你想解决方案的时候你就错了
kekxv
2021 年 7 月 26 日
使用两个 bigint 联合约束作为主键,他要是还说超了,那可以回他:我感觉我现在还不配做那么大的项目🐶
hst001
2021 年 7 月 26 日
能把 bigint 用满的公司可能还是头一次见
0ZXYDDu796nVCFxq
2021 年 7 月 26 日
哈哈哈,上次有个兄弟问怎么把 C(400,1000)的所有组合数在 10 秒内打印出来
数据量比这个还大 n 倍
akira
2021 年 7 月 26 日
考察的重点应该不是 bigint 了啦 ,不要扣字眼去了
hushao
2021 年 7 月 26 日
@goodboy95 抖个机灵,你应该先弱弱的问下他,贵司主键 ID 是不是从 bigint 上限-1 开始自增的能用完[逃~]
yhxx
2021 年 7 月 26 日
第一反应是淘宝订单号那个溢出问题
然后,bigint ???
他是要用来存 ipv6 的吗?
flgn88
2021 年 7 月 27 日
你随口一问是不是会超过 bigint 上限,估摸着他也没算,随口一答罢了。你应该直接跟他算账的,哈哈

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

https://v2ex.xtra.eu.org/t/791877

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

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

© 2021 V2EX