0

我们正在使用 PHP(Zend 框架)、MySQL、运行 Apache 的服务器构建一个社交网站。

有一个要求,应用程序将在仪表板中获取不同事件的数据(大约有 12 个事件),用户的仪表板将在这些事件上更新。我们预计用户总数将在 50 万到 70 万左右。而在某个时候,平均大约 20% 的用户会在线(在高峰期,我们预计 50% 的用户会在线)。

所以问题是我们当前设计的事件数据将被放置在 MySQL 数据库中。我认为即使我们使用 Amazon RDS,在 MySQL 上同时运行几十万个查询也不是一个好主意。因此,我们正在考虑将 DynamoDB(或 Redis 或任何 NoSQL 数据库选项)与 MySQL 一起使用。

所以问题是:在 MySQL 和任何 NoSQL 数据库中都有数据会给我们带来好处,让我们的 Web 应用程序具有这种可扩展性的能力吗?或者我们应该考虑任何其他解决方案?

谢谢。

4

2 回答 2

2

您不需要复制数据。一种选择是使用亚马逊提供的 ElastiCache 为您自己提供内存缓存。这将摆脱您的数据库调用并在某种意义上消除该瓶颈,但这可能非常昂贵。如果您可以牺牲相关时间更新,那么您只需减慢请求或为用户在本地缓存数据即可逃脱。比如说,如果可能的话,在浏览器上缓存接下来的 N 个事件并显示它们,而不是向服务器发出另一个请求。

如果它必须是实时的,那么查看 ElastiCache,然后调整处理估计流量所需的数量。复制数据没有意义。如果将其保留在单个数据库中有意义,则将其保存在单个数据库中,即您有一些您需要的关系信息,然后还有一个可变模式系统,那么您可以使用这两个数据库,但不能将它们一起负载平衡。

我还将开始考虑您的架构中的一些瓶颈,并考虑在您达到估计数字的情况下您的应用程序将/可以扩展的程度。

于 2012-08-31T18:59:01.090 回答
0

我同意@sean,没有必要复制数据库。您是否考虑过具有自动可扩展性的东西,例如Xeround。像这样的解决方案可以在您遇到吞吐量高峰时自动横向扩展多个节点,然后再缩减,因此您不必仅仅因为季节性高峰而承诺使用更大、更广泛的实例。

此外,如果我理解正确,这种自动可扩展性不需要更改代码。所以,我想说,除非你需要在 MySQL 和 NoSQL DB 上复制数据,而不是因为与可伸缩性相关的问题,否则请选择具有自动伸缩功能的单个数据库。

于 2012-09-20T15:58:43.720 回答