如果HTTP是无状态的,为什么我需要关闭数据库连接?

时间:2011-05-24 12:57:45

标签: database http garbage-collection database-connection stateless

我在许多网络语言中看到的一个常见问题是数据库连接需要关闭,否则总连接数逐渐增加,然后以任何形式停止。

HTTP是无状态的,当请求完成处理时,为什么这些语言不能删除请求打开的任何连接?你有什么理由可以保持开放吗?

2 个答案:

答案 0 :(得分:4)

因为打开,验证和授权访问数据库的成本非常昂贵。这就是为什么通常每个人都使用数据库连接池。当请求处理程序从池中获取可用已打开的连接时,连接仍处于打开状态。当一个人关闭连接时,实际发生的是连接被释放以供其他人使用。

回答......

  

为什么这些语言不能放弃   请求打开的任何连接?   有合理的理由吗?   为什么你可以保持开放?

请求完成后,Connections可能会保持打开状态并用于其他目的。例如,数据的异步更新。但是我和你在一起,在90%的情况下,当请求完成时,打开的连接应该返回到池中。根据您使用的Web框架(Spring,DJANGO,...),可以配置或至少实现这种行为。

答案 1 :(得分:0)

关闭http连接时检查打开连接会产生更多开销,所以我猜这就是为什么有些语言默认不关闭它。

如果你没有明确地关闭它,它必须由垃圾收集器完成,这可能需要一段时间。