64位整数实际上有限制吗?

时间:2018-10-16 08:15:32

标签: mysql

我正在为我的网站开发聊天功能。 在我的MySQL数据库中,我为chat_id属性使用64位带符号整数-这是autoincrement

因此,我担心一旦我的系统获得大量流量,chat_id值就会溢出。

所以我的问题是64位整数实际上溢出了吗? 如果是这样,MySql,JavaScript和PHP中是否有128位整数?

3 个答案:

答案 0 :(得分:3)

64位带符号的最高值为9,223,372,036,854,775,807。您正在构建的服务极不可能每个人都有这么多聊天会话。不是因为我不相信它会一次流行,而是因为这个数字非常大。

要指出此数字的大小(来自Wikipedia): 在Java中,以毫秒为单位的时间是64位有符号整数。溢出将需要2.92亿年...

因此,不,对于唯一的chat_id,您不需要超过64位带符号整数,甚至更多,因为您使用了增量器。

答案 1 :(得分:1)

最大的64位无符号整数是一个惊人的18,446,744,073,709,551,615-这是18位数,446兆,744万亿,730亿,7.09亿,55.1万和615

如果通过聊天ID指的是两个用户之间开始的每次唯一聊天,即使您拥有全世界最大的消息传递服务,您也很难达到这个数量。

如果出于某种原因您认为需要一个大于此值的值,请将其以数字和字符的组合形式存储在VARCHAR中,例如... 00-09,然后是0a-0Z(确实很粗糙,以这种精确的形式实际上不是一个好主意,但您明白了),只要您愿意,系统地持续上升的时间就这样,这样,如果您需要更多空间您可以增加字段的大小

答案 2 :(得分:1)

当涉及到ID值时,不可以,在您的方案的实际使用中并不能真正达到其理论极限。

但是,如果您尝试在其中存储一些随机生成的数字,例如UUID(存储需要64位以上的数字,但是我见过有人试图通过将其降级为较长的数字来“加速”它)数字并按原样存储),那么当您获得更多条目时,您可能会有匹配的值。请注意有关UUID的这一部分,因为大多数人只是观察从理论上讲不可能进行匹配,然后他们在一个月之内抽取了数千万条记录,并发现他们经常由于冲突而开始定期发生碰撞这样,随着越来越多的“假UUID”的产生,碰撞机会将如何急剧增加。

总结一下-对于您的自动增量,就可以了。。但是,请勿尝试将128位UUID压缩到其中并将其随机化以进行某些(将来的)迁移或其他操作。 “棘手”经常适得其反。