Vin*_*C M 3 java hibernate transactions jdbc
我读了一本关于Hibernate的书,我遇到了关于Session对象的以下声明.
....但是如您所知,不建议跨多个请求保持JDBC连接,因为它是一种昂贵的资源.因此,如果我们想要长时间维护Hibernate会话,使其跨越多个重用持久实例的请求,我们希望在不关闭会话的情况下断开每个请求的会话JDBC连接.我们可以在Session接口中使用disconnect()和reconnect()方法来支持这种要求.
断开连接并重新连接JDBC会使它比保持原样更昂贵吗?究竟是什么让资源变得昂贵?
在创建(建立)新连接时发生跨越多台机器(如果您的数据库服务器通过网络托管)的握手过程使其变得昂贵.这就是为什么它建议使用连接池,或者在你的情况下使用会话.这可能包括主机查找,初始连接和后续控制命令.
Session接口上的断开连接和重新连接通常不会实际终止与数据库的连接.期望您正在使用池化提供程序并断开会话只是将实际的JDBC连接返回到池以供其他人使用.
对于大规模DBMS,打开连接和打开游标的开销远远高于Java应用服务器上的Web请求的开销.作为应用服务器可以处理数百个同时Web请求的物理计算机,只能处理30-50个并发连接作为Oracle 11服务器.(只是个人/轶事经验,而不是真正的基准.)
如果您在整个"对话"周期中建立连接,那么您的Web吞吐量将仅限于您的数据库资源,这也会比Web请求处理程序线程更快地耗尽.通过仅在您需要时保持连接,而不是整个请求生命周期,在等待数据库连接时阻塞的Web请求线程更少.
| 归档时间: |
|
| 查看次数: |
1817 次 |
| 最近记录: |