2017-10-15 85 views
2

使用诸如SQLite,H2或HSQLDB等嵌入式数据库的HikariCP之类有什么优势? (后两个也可以在服务器模式下运行,但我对此不感兴趣)在嵌入式数据库中使用JDBC连接池有什么好处吗?

除了性能优势(我认为嵌入式数据库可以忽略不计),我也对其他设施感兴趣连接池可以使代码更加简洁和/或健壮。

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

+0

可能有[连接和语句池有什么好处?](https:// stackoverflow。com/questions/457287 /什么是连接和语句池的好处) – shinjw

回答

5

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

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

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

从代码清晰度和抽象的角度来看,连接池也很好,因为它们是完全透明的。如果你有一天决定从嵌入到客户端/服务器,你不需要改变任何东西。

+0

好的答案,特别是资源限制方面。 – brettw

1

我能想到的只有一个案例,

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

使用嵌入式数据库是在项目

的发展阶段有用

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

Spring的情况下选择第二个选项:

春天JDBC的嵌入式数据库支持,可以通过两种方式进行扩展:

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

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