gpt4 book ai didi

asp.net - 为什么在客户端请求之间打开数据库连接是一个坏主意?

转载 作者:行者123 更新时间:2023-12-04 06:56:52 24 4
gpt4 key购买 nike

1)我正在阅读的书认为不应该在客户端请求之间打开连接,因为它们是有限的资源。

我意识到可以快速达到最大池大小,因此任何进一步的打开连接尝试都将排队等待连接可用,因此我们必须尽快释放连接。

但是假设所有请求都将打开到同一个数据库的连接,那么我不确定在两个客户端请求之间打开连接的效率如何比让每个请求首先从连接池获取连接然后将该对象返回到连接的效率更低水池?

2)本书还建议,当数据库代码被封装在一个专用的数据访问类中时,方法M打开一个数据库连接也应该关闭那个连接。

a) 我假设 M 也应该关闭它的一个原因是,如果方法 M 打开连接并没有关闭它,而是在几个方法中使用了这个连接对象,那么程序员很可能会忘记关闭它。

b) 是否有任何其他原因可以解释打开连接的方法也应该关闭它?

谢谢

编辑:

如果在处理 Web 请求的过程中没有关闭连接,那么下一个请求就不能“直接”使用相同的连接,而是首先需要将其返回到连接池,然后才能使用重用?如果是这种情况,我可以看到在请求期间保持连接打开我们如何没有获得任何好处?!

E.g. Transaction 1 reads a row from a table, then the user is thinking long, before modifying the data. During that time, transaction B reads and then updates the same row: transaction A now has stale data! Now if the user finally modifies the data and tx A commits it, the modifications made by tx B may get lost entirely: this is called lost update.



如果我的上述假设是正确的,那么在第一个请求期间发起事务 1(从而建立数据库连接 1)的用户 U 如何在请求期间获得对同一数据库连接 1 的引用(从而获得对事务 1 的“引用”)第二个请求(又名回发)?即服务器处理完用户U的第一个请求时,连接对象不是返回到连接池了吗?

最佳答案

是的,您永远不知道连接将打开多长时间,因为请求是由用户发起的......此外,如果请求丢失(用户关闭浏览器)会发生什么,太容易无限打开连接......很难如果你这样做,有一个清理过程。

哈。

关于asp.net - 为什么在客户端请求之间打开数据库连接是一个坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com