4

在我的生产环境中,我有一个 MySQL 服务器实例,它在 16gig 内存上运行,每小时处理多达 20,000 个查询。我的一张桌子的大小正在以每月 200 万张的速度增长。随着时间的推移,这两个数字都有望上升,但我不确定何时需要改进架构。

一个人如何能够积极应对这种情况并着手对系统进行未来验证?

升级硬件是否会在时间和资金效率方面带来很多好处?

在这种情况下,常见的做法是什么,如果我们每 3 个月将流量翻一番,分片会是一个自然的过程吗?或者还有其他选择吗?

我什至如何判断我的系统是否达到峰值,有哪些工具可用于分析数据库?我会用什么指标来衡量它?

4

1 回答 1

6

很难回答如此庞大的可扩展性问题。

首先,单台机器上的硬件升级不是一个长期的选择——甚至不是一个短期的选择,因为您似乎计划以指数级增长(每 3 个月 x2 很大,从每月 2M 行开始)。所以你必须找到一个分布式可扩展的硬件架构。

然后想到两个基本选项:

坚持使用 SQL

如果您为不断增长的表坚持使用 SQL 存储,您将不得不在集群复制之间进行选择。从我的角度来看,后者通常比前者更具成本效益和更快,但更难解决。

在这里,您会发现一篇非常有趣的关于Advanced MySQL Replication Techniques的论文。

然后,您可以从分区或更好的sharding开始,如您之前提到的。

请注意,一些 MySQL 产品似乎提供了自动分片集群

NoSQL混合

另一种选择显然是设想在您的怪物表上使用 NoSQL 技术。分布式键值存储系统在可扩展性方面几乎没有成本,最多是线性的。

另一点是键值与分布式缓存(例如众所周知的Memcached )可以很好地配合使用,非常容易使用大多数语言的 API 进行设置,以非常低的成本提供非常好的性能。

于 2012-02-19T14:06:35.807 回答