我正在开展一个项目,我不断在表格中插入行,几天之后这个表格会非常大,我想出了一个问题而无法找到答案: 当我知道
表中有更多行而不是'bigint'时会发生什么我有一个'id'列(这是一个int)?我的数据库(MySQL)能否正确处理?大公司如何处理这类问题并加入大桌面?
我不知道是否对这类问题有简短的答案,但欢迎任何解决我问题的方法!
答案 0 :(得分:5)
在用完BIGINT
主键序列之前,您将耗尽存储空间。
Unsigned BIGINT
可以表示0到18,446,744,073,709,551,615的范围。即使您有一个包含单个列的表,其中包含BIGINT
类型的主键(8个字节),您也会消耗(18,446,744,073,709,551,615×8)÷1,024 ^ 4 = 134,217,728太字节的存储空间。
对于MyISAM,MySQL中表的最大大小为256太字节,对于InnoDB,最大大小为64太字节,所以实际上你只限于256×1,024 ^ 4÷8 = 35万亿行。
Oracle支持NUMBER(38)
(占用20个字节)作为最大可能的PK,0到1e38。但是,拥有20字节的主键是没用的,因为Oracle中的最大表大小是4 * 32 = 128太字节(块大小为32K)。
答案 1 :(得分:1)
这是每个拥有大量用户的网站的重大问题之一。想想Facebook,他们每秒钟会收到多少请求?他们有多少台服务器来存储所有数据?如果他们有很多服务器,他们如何在服务器之间分离数据?如果他们在服务器之间分离数据,他们如何能够在多个服务器上调用正常的SQL查询然后加入结果?等等。现在,通过回答所有这些问题(最有可能让你放弃:-))来避免使事情变得复杂,我建议使用Google AppEngine。一开始有点困难,但是一旦你习惯了它,你会感激你学习它的时间。
如果你只有一个数据库并且你没有很多请求,并且你关心的只是存储,那么你应该考虑转移到MSSQL或-better据我所知 - Oracle。
希望有所帮助。
答案 2 :(得分:1)
如果此列是主键,则无法插入更多行。
如果不是主键,则该列将被截断为它可以在该数据类型中显示的最大值。
如果您需要执行加入,还应将id
列更改为bigint。
您可以使用uuid替换整数主键(适用于大公司),
请注意uuiq是字符串,而您的字段不再是数字
答案 3 :(得分:1)
要更加透视BIGINT,如果你在每毫秒1行(每秒1000行)不间断地插入行,那么每年你将有31,536,000,000行。
BIGINT为18,446,744,073,709,551,615,你将在1800万年后表现出色。
答案 4 :(得分:0)
你可以让你的bigint无符号,给你18,446,744,073,709,551,615个可用ID
答案 5 :(得分:-1)
大公司通过使用DB2或Oracle来处理它