有人可以解释什么是连接和语句池,以及与非池化数据源有什么好处?我想了解何时在项目中使用c3p0或proxool等技术是个好主意。我首先需要了解他们做什么以及何时使用它们。非常感谢你。
答案 0 :(得分:49)
每次创建新连接都非常容易。 一行:这就是全部。没有什么可考虑的。美好的生活。
每次使用后你会扔掉你的盘子吗?
不,你将它洗净并放在碗架上,这样你就可以在下一餐时再次使用它。每次都要买新盘子是不可能的。如果你这样做,你将浪费足够的钱在一年内买一台新的iPad。
再次考虑连接池。
但这一次,连接是你的盘子,连接池是你的碗架。您的钱包和能量代表系统资源(内存和带宽)。
你宁愿做什么:
一个。洗碗
湾或者每餐都跑到商场买新盘子?
虽然连接池中涉及任务,但从长远来看,与每次创建新连接相比,它的负担较少。关键是知道你的家庭(申请)在任何一天需要多少盘子(连接)。
池可用于数据库连接,线程,实体bean和其他工厂派生的对象。
答案 1 :(得分:13)
创建与数据库服务器的网络连接(相对)昂贵。 同样地要求服务器准备SQL语句(相对)昂贵。
使用连接/语句池,您可以重用现有连接/预准备语句,从而避免启动连接,解析SQL等成本。
答案 2 :(得分:6)
我不熟悉c3p0,但汇集连接和语句的好处包括:
性能。连接到数据库既昂贵又缓慢。池化连接可以物理连接到数据库,并在需要数据库访问的各种组件之间共享。这样,连接成本就可以支付一次,并在所有消费组件中摊销。
诊断。如果您有一个负责连接数据库的子系统,则可以更轻松地诊断和分析数据库连接使用情况。
可维护性。同样,如果您有一个负责分发数据库连接的子系统,那么与每个组件连接到数据库本身相比,您的代码将更容易维护。
答案 3 :(得分:3)
连接和断开数据库是一项昂贵的操作。通过使用池,您可以编写代码来打开和关闭连接,但池决定何时实际执行此操作,在特定时间内打开一定数量的连接。
声明合并?你在谈论语句缓存吗?
答案 4 :(得分:1)
引用本书 JAVA Persistance with Hibernate
使用a有三个原因 游泳池:
获取新连接非常昂贵。一些数据库管理 系统甚至开始一个全新的 每个连接的服务器进程。
维护许多空闲连接对于数据库管理来说是昂贵的 系统,池可以优化 空闲连接的使用(或 如果没有请求则断开连接)。
对于某些驱动程序而言,创建预准备语句也很昂贵 连接池可以缓存语句 用于跨请求的连接。