MyISAM表中有超过10亿行

根据你的经验,MyISAM表中的行的上限是什么,MySQL可以在Q9650 CPU(4核3.0G)和8G RAM的服务器上高效处理。

我目前有一个1500万行的表。 这很快。 如果规模增加到10亿行,我是否需要将它分成10个表,每个行有1亿行?

我不担心应用程序的性能,在一台机器上可以保持索引在内存中的10亿行。 如果你真的想要达到10亿行,你首先必须做一些math:

  • 你的纪录大小是多less,再乘以十亿?
  • 接下来,你需要计算索引的大小(多个索引,我猜),并添加。
  • 你有交易要求,你想有行级locking?
  • 这是一个append-heavy表或者一个读取重的表吗?

接下来,进入您的应用程序正常运行时间要求

  • 你打算如何备份1B行?
  • 你打算如何处理腐败的1B排桌子?
  • 你多久需要运行一个优化表?
  • 你将如何处理对1B行表进行模式更改? (在2gb ram的2gh双核心机箱上的3500万行的表上增加一个索引,最近花了我45分钟。)

在担心性能之前,我会担心更多的数据生命周期和数据的数据pipe理。 通过复制,可以弥补很多的性能。 保持数据的健全,并从小的灾难中恢复(比如由坏的公羊引起的腐败)更可能首先给你带来麻烦。

我也鼓励你拿走你的桌子 – 并且给它添加1B行的testing数据。 这是非常有见识的看你的系统发生了什么。 针对这个新的巨大数据集,在查询上运行一些EXPLAIN。 时间需要多长时间进行备份和恢复。 您可能需要调整一些要求。

这是一篇有趣的文章,大约有10亿行的mysql。

只是为了增加上面的一些评论,我已经在四个Xeon上有了十亿行表,尽pipe有32Gb RAM,而不是8个。

为了确保我们的性能是好的,表格尽可能地简化和规范化,以保持它们的精简,然后只有几个索引。 这些表格的主要观点,对我来说真的很大,就是写下时间序列数据。 大量的写作,一切顺序,读取很less。 必要的读取总是search特定的时间对另一列或2,所以索引可以照顾。

SAN上的表由SRDF自动备份,当出现问题(磁盘已满等)时,大约需要4个小时才能修复。

取决于你正在运行的查询。 如果你正在做SELECT * FROM table它通常比运行十个JOIN的查询要快得多。

取决于您的硬件,数据,您运行的查询以及您认为的快速。 对于简单的( "select * from table where foo='bla'" )查询来说,计算很简单:如果你的查询使用了一个索引,而且这个索引适合你操作系统的文件系统缓冲区,那么速度会很快。 如果它不合适,查询运行速度会变慢(多less取决于mysql必须读取的数据量和磁盘的速度)

然而,我会使用一个像这样的表的Postgres ACID兼容数据库,你不想修复一个亿行的表