我们有一个大约70 GB的InnoDB数据库,我们预计在未来2到3年内它将增长到几百GB。大约60%的数据属于单个表。目前数据库工作的很好,因为我们有一个服务器与64 GB的内存,所以几乎整个数据库适合内存,但我们关心的未来,当数据量会大得多。现在我们正在考虑分割表(尤其是占据数据最大部分的表)的方法,我现在想知道,最好的方法是什么。
我目前知道的选项是
>使用版本5.1附带的MySQL分区
>使用某种封装数据分区的第三方库(如hibernate shards)
>在我们的应用程序中实现它自己
我们的应用程序建立在J2EE和EJB 2.1(希望我们有一天会切换到EJB 3)。
你会建议什么?
EDIT(2011-02-11):
只是更新:目前数据库的大小为380 GB,我们的“大”表的数据大小为220 GB,其索引的大小为36 GB。因此,虽然整个表不适合在内存中,索引。
系统仍然执行良好(仍在相同的硬件上),我们仍在考虑分区数据。
编辑(2014-06-04):
一个更新:整个数据库的大小是1.5 TB,我们的“大”表的大小是1.1 TB。我们将服务器升级为具有128 GB RAM的4处理器机器(Intel Xeon E7450)。
系统仍在执行良好。
我们计划接下来要做的是将我们的大表放在单独的数据库服务器上(我们已经在我们的软件中进行了必要的更改),同时升级到使用256 GB RAM的新硬件。
这个设置应该持续两年。然后,我们将不得不终于开始实现分片解决方案,或者只是购买1 TB的内存的服务器,这应该保持我们一段时间。
EDIT(2016-01-18):
我们已经把我们的大表放在一个单独的服务器上自己的数据库。目前这个数据库的大小是大约1.9 TB,其他数据库(除了“大”之外的所有表)的大小是1.1 TB。
当前硬件设置:
> HP ProLiant DL 580
> 4 x Intel Xeon CPU E7- 4830
> 256 GB RAM
性能是这个设置很好。