.net – 可以安全地保持数据库连接长时间打开

我有一个连接到远程数据库的.net客户端应用程序。
是否可以保持单个连接在客户端的生命周期中打开(小时)?

如果我有多个(10或100)客户端运行,答案是否成立?

谢谢

绝对是安全的做到这一点。这是客户端 – 服务器应用程序的工作原理。如果使用三层应用程序,应用程序服务器将保持一个连接池。

可扩展性是一个问题,或者至少在机器具有比现代套件少的内存的日子。使用双层(客户端 – 服务器)应用程序,每个客户端打开一个连接并保持打开。这有几个效果:

>每个连接使用内存,所以
大量(相对)空闲
连接会占用机器
记忆。但是,一个现代的64位
服务器可以有几十或几百个
GB的内存,所以它可以支持a
非常大数量的
连接。
>如果交易已离开
未提交在客户端机器上,
锁将保持打开为
只要事务处于打开状态。
这导致了一类问题时
有人可以开始一个事务,
去吃午饭,忘了他们
留下东西开。这个会
锁定由引用的任何记录
交易一次小时。
>交易可以,但很容易
覆盖多个附件
数据库,这是更难做到的
连接池。

在3层体系结构上常见的池化体系结构在应用服务器和数据库之间具有有限数量的连接。查询只使用下一个可用的连接,更新立即提交。这使用较少的资源,因为您只有有限数量的连接打开,(结合optimistic concurrency策略)将消除大量潜在的应用程序并发问题。

为了使用long transactions(即覆盖对数据库的多于一个调用的事务),必须将事务从连接去耦合。这是一个TP监视器的基本架构,有一些标准协议,如XAOLE Transactions支持这一点。如果这种类型的外部管理事务不可用,那么应用程序必须构造一个compensating transaction来撤销应用程序的事务所做的更改。这种类型的架构经常被workflow management systems.使用

http://stackoverflow.com/questions/312702/is-it-safe-to-keep-database-connections-open-for-long-time

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:.net – 可以安全地保持数据库连接长时间打开