根据你的经验,MyISAM表中的行的上限是什么,MySQL可以在Q9650 CPU(4核3.0G)和8G RAM的服务器上高效处理。
我目前有一个1500万行的表。 这很快。 如果规模增加到10亿行,我是否需要将它分成10个表,每个行有1亿行?
我不担心应用程序的性能,在一台机器上可以保持索引在内存中的10亿行。 如果你真的想要达到10亿行,你首先必须做一些math:
接下来,进入您的应用程序正常运行时间要求
在担心性能之前,我会担心更多的数据生命周期和数据的数据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兼容数据库,你不想修复一个亿行的表