MySQL 中的最大行数

Posted

技术标签:

【中文标题】MySQL 中的最大行数【英文标题】:Max number of rows in MySQL 【发布时间】:2010-01-21 13:48:30 【问题描述】:

我计划生成大量数据,并将其存储在 mysql 数据库中。我目前的估计指向主表中的四 千百万 十亿 行(只有两列,其中一列已编入索引)。

这里有两个问题:

1) 这可能吗?

更具体地说:

2) 这样的表能有效使用吗?

谢谢!, 詹姆

【问题讨论】:

什么样的数据,你打算怎么用? 我很想知道,当你有四亿行时,你在存储什么样的数据? :) 出于某种原因,40 亿听起来不像 40 亿那么大。 科学结果:我只需要存储大量物种基因组序列之间的全反全关系。然后我必须进行查询以根据某些标准对它们进行分组。 这可能是 100gb 的数据?我有更多电子邮件的用户,我想你会没事的。但是,将其乘以 10,我会开始考虑 BigTable。 【参考方案1】:

当然,这是可能的。它是否可用将取决于您如何使用它以及您拥有多少硬件/内存。对于这么大的表,如果分区对您要存储的数据类型有意义,那么使用分区可能也是有意义的。

预计到达时间:

基于您只有两列且其中一列被索引的事实,我将在这里大胆猜测这是某种键值存储。如果是这种情况,您可能还需要研究专门的键值存储数据库。

【讨论】:

关于键值数据库的要点。如果这是您需要的,请查看 Redis:code.google.com/p/redis【参考方案2】:

可能是可能的,MySQL 有几个具有不同功能的表存储引擎。例如,我认为 MyISAM 存储引擎有一个theoretical data size limit of 256TB,但它进一步受到操作系统上文件的最大大小的限制。我怀疑它是否可用。我几乎可以肯定它不会是最优的。

我肯定会考虑以对您的键有意义的方式将这些数据划分到多个表(甚至可能是多台机器上的多个数据库),然后联合任何搜索结果/总计/等。你需要。除此之外,这允许您在并行搜索每个分区的情况下进行搜索(在多服务器方法中)。

我还会寻找一种已经完成了繁重的分区和联合查询的解决方案。我想知道 Google 的 AppEngine 数据存储 (BigTable) 或 Amazon SimpleDB 是否有用。它们都会限制您可以对数据执行的操作(它们不是 RDBMS 的),但是无论如何,绝对大小都会这样做。

【讨论】:

"...但它进一步受到操作系统上文件的最大大小的限制" - mysql 没有可以使用原始未分区磁盘存储数据的模式吗?这可能会避免文件系统文件大小的限制。 这是一个链接;没有提到避免文件大小限制。 dev.mysql.com/doc/refman/5.0/en/innodb-raw-devices.html @unknown:这很酷。正如我所说,MySQL "...有几个具有不同功能的表存储引擎...MyISAM 引擎,例如...[is] 进一步受限..."(请参阅嵌入的链接在句子中)。 InnoDB(不同的引擎)可以使用原始设备非常酷。【参考方案3】:

您应该考虑对数据进行分区...例如,如果两列之一是名称,则根据第一个字母将行分成 26 个表。

【讨论】:

【参考方案4】:

我创建了一个 mysql 数据库,其中一个表包含超过 200 万行(导入的美国人口普查县线数据以覆盖在 Google 地图上)。另一个表的行数略低于 100 万行(USGS Tiger 位置数据)。这是大约 5 年前的事了。

我真的没有问题(一旦我记得创建索引!:))

【讨论】:

他有 4 十亿 行数据。这比你所拥有的要多 1000 倍,所以很遗憾,我认为你的答案不是很相关。【参考方案5】:

4 gigarows 并没有那么大,实际上,今天任何数据库引擎都可以处理它。甚至分区也可能是一种矫枉过正。它应该可以正常工作。

不过,您的表现将取决于您的硬件。

【讨论】:

以上是关于MySQL 中的最大行数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL最大建议行数2000w, 靠谱吗?

MySQL最大建议行数2000w, 靠谱吗?

MySQL最大建议行数2000w, 靠谱吗?

MySQL最大建议行数2000w, 靠谱吗?

sql 怎么分组取行数最大的一条

如何计算 Visual Basic 中的最大行数