【发布时间】:2010-10-02 05:16:12
【问题描述】:
有人能解释一下什么是连接和语句池,以及与未池化的数据源相比有什么好处吗?我试图了解在项目中使用 c3p0 或 proxool 等技术何时是个好主意。我首先需要了解它们的作用以及何时使用它们很有趣。非常感谢。
【问题讨论】:
标签: database connection-pooling c3p0
有人能解释一下什么是连接和语句池,以及与未池化的数据源相比有什么好处吗?我试图了解在项目中使用 c3p0 或 proxool 等技术何时是个好主意。我首先需要了解它们的作用以及何时使用它们很有趣。非常感谢。
【问题讨论】:
标签: database connection-pooling c3p0
每次都可以轻松创建新连接。 一行:仅此而已。没什么好想的。美好的生活。
每次使用后你都会扔掉你的盘子吗?
不用,你把它洗干净放在碗碟架上,这样你下一顿饭就可以再用了。每次都买新盘子是不可能的。如果你这样做了,一年后你就浪费了足够的钱来购买一台新 iPad。
再次考虑连接池。
但这一次,连接是你的盘子,连接池是你的盘子架。你的钱包和你的能量代表了系统资源(内存和带宽)。
你更愿意做什么:
一个。洗碗
b.还是每顿饭都跑到商场买新盘子?
虽然连接池涉及一些任务,但从长远来看,与每次创建新连接相比,它的工作量更少。关键是要知道您的家人(应用程序)在任何一天需要多少板(连接)。
池可用于数据库连接、线程、实体 bean 和其他工厂派生对象。
【讨论】:
我对c3p0不熟悉,但是池化连接和语句的好处包括:
性能。连接到数据库既昂贵又缓慢。池连接可以保持物理连接到数据库,并在需要数据库访问的各种组件之间共享。这样,连接成本一次性支付,并在所有消费组件中分摊。
诊断。如果您有一个子系统负责连接到数据库,那么诊断和分析数据库连接使用情况会变得更容易。
可维护性。同样,如果您有一个负责分发数据库连接的子系统,那么您的代码将比每个组件都连接到数据库本身更容易维护。
【讨论】:
引用JAVA Persistance with Hibernate一书
使用 a 的三个原因 池:
获取新连接的成本很高。一些数据库管理 系统甚至开始一个全新的 每个连接的服务器进程。
维护许多空闲连接对于数据库管理来说代价高昂 系统,并且池可以优化 空闲连接的使用(或 如果没有请求,请断开连接)。
对于某些驱动程序来说,创建准备好的语句也很昂贵,而且 连接池可以缓存语句 用于跨请求的连接。
【讨论】:
创建到数据库服务器的网络连接是(相对)昂贵的。 同样,要求服务器准备一条 SQL 语句是(相对)昂贵的。
使用连接/语句池,您可以重用现有的连接/准备好的语句,避免启动连接、解析 SQL 等成本。
【讨论】:
从数据库连接和断开连接是一项昂贵的操作。通过使用池,您可以编写代码来打开和关闭连接,但池决定何时实际执行此操作,从而在一定时间内打开一定数量的连接。
语句池?你说的是语句缓存吗?
【讨论】: