如何正确处理数据库连接?

时间:2013-02-01 05:56:17

标签: python database

我想优化我的系统,以便能够在未来处理大量用户。即使网站永远不受欢迎,我也想做正确的事。

无论如何,我目前正在使用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

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

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

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

2 个答案:

答案 0 :(得分:1)

我认为这不是事先优化事物的好方法。你不知道瓶颈会出现在哪里,你可能只是浪费时间去做你以后不需要的东西。

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

答案 1 :(得分:1)

如果要打开连接,你绝对应该考虑使用池来避免使用每个会话连接或类似的东西来捣乱系统(只要它们被正确锁定以避免泄漏)。也就是说,这样做的必要性尚不清楚。如果您可以使用数据库的某些平均/最差情况连接时间来量化系统,那么您将能够做出更明智的决策。

尝试运行脚本来锤击您的系统并调查数据库相关的时间。这可以帮助您立即决定是否保留持久连接和方便的DB加载脚本以供日后使用。

相关问题