Connection和Statement Pooling有什么好处?

时间:2009-01-19 11:17:18

标签: database connection-pooling c3p0

有人可以解释什么是连接和语句池,以及与非池化数据源有什么好处?我想了解何时在项目中使用c3p0或proxool等技术是个好主意。我首先需要了解他们做什么以及何时使用它们。非常感谢你。

5 个答案:

答案 0 :(得分:49)

快乐连接

每次创建新连接都非常容易。 一行:这就是全部。没有什么可考虑的。美好的生活。

等一下。你在盘子里吃东西吗?

enter image description here

每次使用后你会扔掉你的盘子吗?

不,你将它洗净并放在碗架上,这样你就可以在下一餐时再次使用它。每次都要买新盘子是不可能的。如果你这样做,你将浪费足够的钱在一年内买一台新的iPad。

再次考虑连接池。

但这一次,连接是你的盘子,连接池是你的碗架。您的钱包和能量代表系统资源(内存和带宽)。

洗或花?

你宁愿做什么:

一个。洗碗

湾或者每餐都跑到商场买新盘子?

虽然连接池中涉及任务,但从长远来看,与每次创建新连接相比,它的负担较少。关键是知道你的家庭(申请)在任何一天需要多少盘子(连接)。

池可用于数据库连接,线程,实体bean和其他工厂派生的对象。

答案 1 :(得分:13)

创建与数据库服务器的网络连接(相对)昂贵。 同样地要求服务器准备SQL语句(相对)昂贵。

使用连接/语句池,您可以重用现有连接/预准备语句,从而避免启动连接,解析SQL等成本。

答案 2 :(得分:6)

我不熟悉c3p0,但汇集连接和语句的好处包括:

  1. 性能。连接到数据库既昂贵又缓慢。池化连接可以物理连接到数据库,并在需要数据库访问的各种组件之间共享。这样,连接成本就可以支付一次,并在所有消费组件中摊销。

  2. 诊断。如果您有一个负责连接数据库的子系统,则可以更轻松地诊断和分析数据库连接使用情况。

  3. 可维护性。同样,如果您有一个负责分发数据库连接的子系统,那么与每个组件连接到数据库本身相比,您的代码将更容易维护。

答案 3 :(得分:3)

连接和断开数据库是一项昂贵的操作。通过使用池,您可以编写代码来打开和关闭连接,但池决定何时实际执行此操作,在特定时间内打开一定数量的连接。

声明合并?你在谈论语句缓存吗?

答案 4 :(得分:1)

引用本书 JAVA Persistance with Hibernate

  

使用a有三个原因   游泳池:

     
      
  • 获取新连接非常昂贵。一些数据库管理   系统甚至开始一个全新的   每个连接的服务器进程。

  •   
  • 维护许多空闲连接对于数据库管理来说是昂贵的   系统,池可以优化   空闲连接的使用(或   如果没有请求则断开连接)。

  •   
  • 对于某些驱动程序而言,创建预准备语句也很昂贵   连接池可以缓存语句   用于跨请求的连接。

  •