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

发布于 2024-11-09 13:30:35 字数 128 浏览 4 评论 0原文

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

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

A commonly problem I see in lots of web languages is that database connections need to be closed otherwise the number of total connections gradually increases and then it grinds to a halt in whatever form.

HTTP is stateless, when the request has finished processing why can't these languages just drop any connections that request opened? Are there any legitimate reasons for why you might keep it open?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红焚 2024-11-16 13:30:35

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

来回答...

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

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

Because the cost of opening, authenticating and authorising access to a database is quite expensive. That is why normally everybody uses a databases connection pool. Connections are still open while request handlers pick up a available-already-opened connection from a pool. When one closes a connection what is really happening is that the connection is being freed for others to use.

To answer ...

why can't these languages just drop
any connections that request opened?
Are there any legitimate reasons for
why you might keep it open?

Connections might stay opened after the request is complete and use for other purposes. For instance asynchronous updates of data. But I am with you, in 90% of the cases when the request is finished the connections opened should be returned back to the pool. Depending on the Web Framework you use (Spring, DJANGO, ...) this kind of behaviour can be configured or at least implemented with minimum effort.

你怎么敢 2024-11-16 13:30:35

在关闭 http 连接时检查打开的连接会产生更多开销,因此我想这就是为什么某些语言默认情况下不关闭它的原因。

如果您不显式关闭它,则必须由垃圾收集器来完成,这可能需要一段时间。

Checking for an open connection while closing an http connection gives more overhead so I guess that's why some languages don't close it by default.

And if you don't close it explicitly, it will have to be done by the garbage collector which can take a while.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文