0

我想优化我的系统,以便能够处理大量用户。即使网站永远不会流行,我也想做正确的事情。

无论如何,我目前正在使用 2 个数据库解决方案的组合:

1.) Either SQL (mysql, postgre) via SQLAlchemy OR MongoDB
2.) Redis

我使用 Redis 作为“热”数据库(因为它的速度要快得多,并且可以减轻主数据库解决方案的压力),而不是通过 cron 任务在两个之间同步数据。我使用 Redis 进行会话管理、统计等。但是,如果我的 Redis 服务器崩溃,站点将保持运行(回退到 sql/mongo)。

所以这是我的数据设计。现在我想做正确的连接。

由于 99% 的页面都需要 sql/mongo 和 redis,所以我目前的设计如下:

- When new HTTP request comes in, I connect to all databases
- When page finishes rendering, I disconnect from databases

现在显然我正在做很多连接/断开连接。我已经计算出这个模型可以维持相当数量的访问者,但是我想知道是否有更好的方法来做到这一点。

请求之间的持久连接会提高性能/负载,还是打开连接的数量会阻塞服务器?你会推荐创建一个连接池吗?如果是这样,什么时候应该创建连接池以及模型应该如何访问它(或从中获取连接对象)。

如果这些问题很愚蠢,我很抱歉,但我是新手。

4

2 回答 2

1

If you are going to leave connections open, you should definitely consider pooling to avoid crudding up the system with per-session connections or something of the like (as long as they are locked properly to avoid leaking). That said, the necessity of doing this isn't clear. If you can quantify the system with some average/worst-case connection times to the databases, you'd be able to make a much more informed decision.

Try running a script(s) to hammer your system and investigate DB related timing. This should help you make an immediate decision about whether to keep persistent connections and a handy DB load script for later on.

于 2013-02-01T06:18:19.887 回答
1

我不认为这是预先优化事物的好方法。您不知道瓶颈会出现在哪里,而且您可能只是在浪费时间在将来大部分不需要的事情上。

如果您将使用 ORM,以后可以更改数据库类型,所以现在您可以使用任何类型。无论如何,如果您的网站受欢迎程度会提高,您将需要获得更多服务器,添加一些任务队列(芹菜)等。您以后可以做很多事情来优化。现在,您应该只专注于让您的网站受欢迎并使用可以在未来扩展的技术。

于 2013-02-01T06:07:47.880 回答