将JDBC连接池与嵌入式数据库一起使用是否有好处?

时间:2017-10-15 07:20:57

标签: java jdbc connection-pooling hikaricp embedded-database

使用HikariCP等嵌入式数据库(如SQLite,H2或HSQLDB)有什么好处吗? (最后两个也可以在服务器模式下运行,但我对此不感兴趣)

除了性能优势(我认为嵌入式数据库可以忽略不计)之外,我还对连接池提供的其他工具感兴趣,这些工具可以使代码更简洁和/或更健壮。

我认为这个问题与this other one的不同之处在于它更具体,因为它专注于嵌入式数据库,并且在较小程度上关注HikariCP。

2 个答案:

答案 0 :(得分:7)

存在连接池主要是因为从头开始新连接是一项昂贵的操作。通常,它涉及TCP / IP握手,加密和协议协商和身份验证。关闭连接时也会有一些开销。

所以这最终归结为实现:是否打开一个足够慢的新连接以保证重用?如果打开连接的总时间与其他操作所消耗的时间相比较大,或者打开连接会产生严重延迟,则连接池是有意义的。对于嵌入式数据库,差异应该是最小的,因为它们在与程序本身相同的内存空间中运行。

但是,连接池也有一个有用的副作用,因为它限制了最大同时连接数。在没有连接池的服务器上,攻击者可以轻松发送大量请求,耗尽内存或导致拒绝服务。

从代码清晰度和抽象的角度来看,连接池也很好,因为它们是完全透明的。如果您有一天决定从嵌入式服务器迁移到客户端/服务器,则无需进行任何更改。

答案 1 :(得分:1)

我只想到一个案例,

如果您在开发嵌入式数据库和生产中使用嵌入式数据库

  

嵌入式数据库在项目的开发阶段非常有用

然后,您可以在不更改代码的情况下(使用依赖注入)重用与不同数据库的连接池相同的代码。

Spring案例中,选择第二个选项:

  

Spring Jdbc的嵌入式数据库支持可以通过两种方式扩展:

     
      
  1. 实施EmbeddedDatabaseConfigurer以支持新的嵌入式数据库类型,例如Apache Derby。

  2.   
  3. 实现DataSourceFactory以支持新的DataSource实现,例如连接池,以管理嵌入式数据库连接。

  4.