繁体   English   中英

Hibernate C3P0池机制

[英]Hibernate C3P0 pool mechanism

我在Web应用程序中使用了Hibernate。

并使用了C3P0连接池机制。

我的配置如下所示,要检查其是否正常工作,我将max_size和min_size设置为0。理想情况下,我认为如果它为0,则它​​不应给我任何连接,并且应该引发错误/异常。 但是它没有做任何这样的事情。 它正常工作。

因此,如何确定给定的C3P0相关配置是完美的配置?

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/reg</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="connection.autocommit">false</property> 

<!-- Connection pooling configuration -->
<property name="c3p0.acquire_increment">1</property> 
<property name="c3p0.idle_test_period">1</property> <!-- seconds --> 
<property name="c3p0.max_size">0</property> 
<property name="c3p0.max_statements">0</property> 
<property name="c3p0.min_size">0</property> 
<property name="c3p0.timeout">200</property> <!-- seconds --> 


<property name="hibernate.show_sql">false</property>

这取决于您正在构建的应用程序。

使用数据库连接池的原因如下:

  • 获取数据库连接是一项昂贵的操作。
  • 您的资源有限,因此一次只能打开有限数量的数据库连接。
  • 并非服务器正在处理的所有用户请求都在执行数据库操作,因此您可以在请求之间重用数据库连接。

由于获取新连接的成本很高,因此应将min_size保持为非零。 根据轻度使用应用程序期间的负载,您可以在此处进行合理的猜测。 通常,在大多数示例中指定5。

acquisition_increment取决于使用您的应用的用户数量增长的速度。 因此,想象一下,如果您每次需要一个额外的连接时都要求一个新的连接,则您的应用程序可能会运行不佳。 因此,在预期用户数量激增的情况下,您可能希望增加更大的块,例如5或10或更多。

通常,最大 您拥有的数据库连接数可以少于使用您的应用程序的并发用户数。 但是,如果您的应用程序占用大量数据库资源,则可能必须配置max_size来匹配您拥有的并发用户数。

有时候,即使将max_size设置得很高,您也可能无法处理这么多用户。 到那时,您将不得不考虑重新设计应用程序以避免数据库负载。 通常,这是通过将读取操作卸载到仅提供读取操作的备用数据库实例来完成的。 同样,人们采用这种数据的缓存,这种数据不经常改变但是经常被读取。

类似的理由也可以应用于其他领域

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM