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 中的最大行数的主要内容,如果未能解决你的问题,请参考以下文章