【问题标题】:Hibernate :What makes JDBC connections expensive?Hibernate:是什么让 JDBC 连接变得昂贵?
【发布时间】:2011-09-19 05:09:43
【问题描述】:

我读了一本关于 Hibernate 的书,发现以下关于 Session 对象的陈述。

....但是如您所知,持有 JDBC 跨多个请求的连接 不推荐,因为它是 昂贵的资源。因此,如果我们想 保持休眠会话 长时间,使其跨越 多次重用请求 我们想要的持久实例 断开会话的 JDBC 每个请求的连接没有 关闭会话。我们可以用 disconnect() 和 reconnect() 方法 在 Session 接口中支持 这种要求。

断开和重新连接 JDBC 是否比保持原样更昂贵?究竟是什么让资源变得昂贵?

【问题讨论】:

    标签: java hibernate jdbc transactions


    【解决方案1】:

    Session 接口上的断开连接和重新连接通常不会真正终止与数据库的连接。期望您使用池化提供程序并断开会话只是将实际的 JDBC 连接返回到池以供其他人使用。

    对于大型 DBMS,打开连接和打开游标的开销远远高于 Java 应用服务器上 Web 请求的开销。一台可以作为应用服务器同时处理数百个 Web 请求的物理计算机,作为 Oracle 11 服务器只能处理 30-50 个同时连接。 (只是个人/轶事经验,不是真正的基准。)

    如果您在整个“对话”周期中都处于连接状态,那么您的 Web 吞吐量将受限于您的数据库资源,这同样会比 Web 请求处理程序线程更快地耗尽。通过仅在您需要时保持连接,而不是在整个请求生命周期内保持连接,更少的 Web 请求线程在等待数据库连接时被阻塞。

    【讨论】:

    • 该死,我只是在输入这个。你不能再等一会儿吗:P
    • 2 后续问题 1) 为什么每个请求都需要一个 Connection 对象?每个请求一个连接这个边界的必要性是什么?换句话说,如果一个连接适用于所有人,会出现什么问题? 2) 继续您的 web 与 db 处理能力比较,那么我们如何才能使 DB 像 http web reqs 一样快地执行?如果没有,很快 app-svr 将开始累积 reqs 并且内存将达到其极限。我可能有更多的 app-svrs 来处理内存,但响应时间仍然是相同的。拱门是什么在服务器和数据库端遵循以获得最佳结果?
    • @user104309 1) 如果您在多个线程之间共享关系数据库连接会发生什么...?完全混乱,不要那样做。
    • @user104309 2) 这可能真的是它自己的问题,但是这个人的意见,使关系高度可扩展的唯一方法是在数据库中做的事情尽可能少,保持查询简单而简单,并将逻辑保存在(当然是完全无状态的)应用程序服务器中。是的,单独的请求的响应时间可能会更高,但保持大规模响应时间的能力更好。归根结底,大规模的公共服务在幕后没有关系是有原因的.....
    【解决方案2】:

    这取决于资源是什么。但是对于像数据库连接这样的东西,它被认为是昂贵的,因为为了做到这一点,机器必须分配套接字、内存、文件和其他资源来保持你和数据库之间的连接打开。设置连接也需要相当长的时间(从计算机的角度来看),因此不断打开和关闭它会减慢您的速度。

    最好的折衷办法是使用连接池。因此,一个连接在需要它的多个事物之间共享。这样可以节省大量时间和资源,并且考虑到在大多数情况下连接不会被持续使用,共享会更好地利用它。

    【讨论】:

      【解决方案3】:

      跨多台机器的握手过程(如果您的数据库服务器托管在网络上)在创建(建立)新连接时发生,这使得它变得昂贵。这就是为什么它建议使用连接池,或者在你的情况下使用会话。这可能包括主机查找、初始连接和后续控制命令。

      【讨论】:

      • 我的问题是,为什么要关闭连接?
      • @cmv: 因为如果不关闭,其他线程不能使用连接?这就是为什么你必须共享连接。
      • 我猜。连接池上下文中的“关闭”意味着将连接返回到池中(因为池连接对象的“关闭”是以这样一种方式实现的,即创建一个表明它当前空闲的条目)
      猜你喜欢
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2012-09-20
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      相关资源
      最近更新 更多