2010-12-15 75 views
3

我正在一个项目中工作,我不断地在表格中插入行,并且在几天内这个表格会变得非常大,我想出了一个问题,但无法找到答案: 当我在该表中有比'bigint'更多的行时,将会发生什么事知道如何在数据库的特定表格中处理大量数据

我有'id'列(这是一个int)?我的数据库(MySQL)可以正确处理吗?大公司如何处理这类问题并加入大桌面?

我不知道是否有这样的问题的简短答案,但任何领导解决我的问题将受到欢迎!

+1

更好地将标题编辑为“如何在数据库的特定表中使用大量数据处理大型表ID值”。否则,它可能听起来像你在处理大量的数据。 – 2010-12-15 16:51:04

回答

1

numeric data type

如果此列是主键处理它,你是不是能够插入多行。

如果不是主键,则该列将被截断为它可以在该数据类型中呈现的最大值。

如果您需要执行连接,您应该将id列更改为bigint。

您可以使用uuid更换整数主键(大公司),

注意到,uuiq是字符串,而你的领域将在数字

1

这是每个有大量用户的网站的大问题之一。想想Facebook,他们每秒会收到多少请求?他们需要多少台服务器才能存储所有数据?如果他们有很多服务器,他们如何将数据分离到服务器上?如果他们将数据分离到服务器上,他们将如何在多台服务器上调用正常的SQL查询,然后加入结果?等等。现在通过回答所有这些问题(这很可能会让你放弃:-))来避免让你的事情复杂化,我建议使用Google AppEngine。开始时有点困难,但一旦你习惯了它,你会很感激你花时间学习它。

如果你只有一个数据库,并且你没有很多请求,而你关心的只是存储,那么你应该考虑转移到MSSQL或者 - 据我所知 - Oracle。

希望有所帮助。

+0

感谢您的回答,但现在我有更多的问题嘿嘿!我已经使用Google AppEngine玩过一些,我也在考虑使用Amazong Web服务来处理我的问题。但是你知道MySQL是否不能处理比​​'bigint'更多的行吗? – MartinMoizard 2010-12-15 16:53:02

-1

大公司通过使用DB2或Oracle

+0

没有解释为什么这有帮助,这个答案是没用的。 – 2011-08-25 07:45:24

+0

所有评论必须是'有用的'(没有幽默的地方) - 减轻Stu – RickyB 2011-09-07 10:26:03

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 TB存储空间。

MySQL中表的最大大小为MyISAM 256TB和InnoDB 64TB,所以你真的被限制在256×1,024^4÷8 = 35万亿行。

Oracle支持NUMBER(38)(需要20个字节)作为最大可能的PK,0到1e38。但是有一个20字节的主键是无用的,因为Oracle中的最大表大小是4 * 32 = 128TB(在32K块大小)。

+0

这是假设所有记录都是按顺序排列的(始终为+1) – ajreal 2010-12-15 17:01:47

0

你可以让你的BIGINT签名,让您18,446,744,073,709,551,615可用ID

1

为了把BIGINT更成的角度来看,如果你以每毫秒1行插入行不停(每秒1000行),你会每年有315.36亿行。

BIGINT在18,446,744,073,709,551,615你将会有1800万年的历史。