2011-01-29 168 views
14

注意:我在这里搜索了其他类似的问答,没有其他答案的问题甚至是远程相似..因此... 我有一个关于MySql的问题表格(更准确地说,来自表格的特定字段 - 即tweetsupdates)。什么是MySQL表的最大行数

所以这个问题...... InnoDB表上的最大行数是多少?也就是说,如果MyIsam,InnoDB和其他数量之间存在显着的差异,那么一般情况下,如果没有这些差异。其次,如果表格变得非常大,那么存储数据的最佳做法是什么?(同一个表或分割/多个表/ dbs)?

我读过那个twitter会得到类似于每天1亿条推文的东西。在同样的背景下,我的第二个问题如何适用于Twitter这样的内容?

回答

14

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html将允许您计算您的密钥大小限制。

但我谦恭地建议你不想来存储像引用完整性和InnoDB的其他功能的事务引擎鸣叫信息,你肯定不把它们都存储在一个表中的单个DB实例。你把它们分成许多独立的非SQL数据库,允许你快速追加,然后将元信息(如hashtags,RTs等)提取到更复杂的数据库中。在Twitter数据库架构上的演示文稿很容易在谷歌(例如http://www.slideshare.net/nkallen/q-con-3770885)。

如果您必须将大量数据存储在一张表中,分区是您的朋友,并且可能Postgres对它有更好的支持。分区表在物理上是几个逻辑上看起来像一个表的表。你把这些子表(分区)放到不同的磁盘上,独立地对它们进行维护,等等。另外,一个包含一个非常长的表格的“星形模式”只包含基本列和许多存储较大但可选列的表格帮帮我。

18

没有行限制,但一个InnoDB数据库上size limit

最小表空间大小为10MB。 最大表空间大小为四个 十亿个数据库页(64TB)。这也是 也是表格的最大尺寸。

您可以随时在同一张表的多个分区中存储行,并将其存储在多个文件中。

+0

我的其他问题呢? :)谢谢 – 2011-01-29 09:16:53

+0

@avon_verma:已更新 – ash 2011-01-29 09:39:57

+0

是水平分区作为Sharding? @ash – edam 2015-05-26 09:27:30

1

的64TB限制表中有下列情况除外:

  • ,它假定innodb_page_size = 16K(默认值)。可以将其设置为4K和64K之间的2的幂次,从而按比例更改表空间限制。
  • A PARTITIONed表本质上是一堆组织在一起,作为一个大表行事的'子表'。分区数量前5.6.7的限制是1024.之后,它已经是8192.所以乘以64TB。

行,那只能给你一个字节限制。此外,它还包括开销和索引。然后,您需要划分平均记录有多大以获得最大行数。

(这是不容易计算的平均记录大小。)

答案很简单:

你或许可以很容易地在一个InnoDB表获得1万亿“小”的记载。通过一些努力,你可能会达到1000兆。但是我怀疑你在这之前已经耗尽了磁盘驱动器的预算。此外,要花所有时间完成所有的INSERTs

所以,现实的答案:MySQL可以处理'无限'的行数。

现实生活中?我听说有几十亿行的表格,甚至多达150亿。

请参阅我的Limits,但在行数问题上没有多说。