我们有一个大约 70 GB 的 InnoDB 数据库,我们预计它会在未来 2 到 3 年内增长到数百 GB。大约 60% 的数据属于单个表。目前数据库运行良好,因为我们有一个 64 GB RAM 的服务器,所以几乎整个数据库都可以放入内存,但我们担心未来数据量会变得相当大。现在我们正在考虑某种拆分表格的方法(尤其是占数据最大部分的表格),我现在想知道,最好的方法是什么。
我目前知道的选项是
- 使用 5.1 版附带的 MySQL 分区
- 使用某种封装数据分区的第三方库(如休眠分片)
- 在我们的应用程序中自己实现它
我们的应用程序建立在 J2EE 和 EJB 2.1 之上(希望有一天我们会切换到 EJB 3)。
你有什么建议?
编辑(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 RAM 的服务器,这应该会让我们持续一段时间。
编辑(2016-01-18):
从那以后,我们将我们的大表放在单独服务器上的它自己的数据库中。目前,这个数据库的大小约为 1.9 TB,另一个数据库(除了“大”表之外的所有表)的大小为 1.1 TB。
当前硬件设置:
- HP ProLiant DL 580
- 4 x Intel(R) Xeon(R) CPU E7-4830
- 256 GB 内存
此设置的性能很好。