多线程访问嵌入式 HSQLDB 数据库

Posted

技术标签:

【中文标题】多线程访问嵌入式 HSQLDB 数据库【英文标题】:Multithreaded access to an embedded HSQLDB database 【发布时间】:2013-02-25 18:33:41 【问题描述】:

我有一个 HSQLDB 嵌入式数据库,我用它来存储一些测量的统计数据。统计信息预计大约每秒从同一线程到达,但每隔几秒从几个不同的线程(从线程池中)获取。

我对 jdbc 没有太多经验,所以我的问题可能听起来很琐碎:

    每秒创建/处理一个新连接的价格是多少?回想一下,数据库是嵌入式的,因此不涉及 TCP/IP。 每秒创建/处理准备好的语句的价格是多少?

请注意,有些插入是批量插入,我认为在其中使用准备好的语句的addBatchexecuteBatch 方法。

【问题讨论】:

【参考方案1】:

您应该尝试重用连接和准备好的语句。

为此,每个线程将有一个单独的连接,并且每个连接将重用一组准备好的语句。在工作单元完成后提交连接,但未关闭。当您的应用关闭或完成其工作时,连接将关闭。

您应该使用 executeBatch 进行批量插入。

使用 HSQLDB,每秒创建/处理一个新连接/预处理语句的代价并不高,但如果可以的话,您仍然应该避免这种情况。

【讨论】:

我必须手动实现这样的连接池还是有什么你推荐的? 设计您的应用程序以保留执行工作的 Runnable 类。每个实例都可以保持其连接并重用它。 在此处查看 ClientThread 示例:hsqldb.svn.sourceforge.net/viewvc/hsqldb/base/trunk/src/org/… 我拿了 apache commons-dbcp 包,它似乎完全符合我的需要。 嗨 Fredt,我试图深入挖掘您上面的 github 示例,但找不到您如何(以及在​​哪个文件中?)为 HSQLDB 配置多线程。你能分享文件吗(这里有路径)。非常感谢!

以上是关于多线程访问嵌入式 HSQLDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB:.script 文件在多个项目执行[多线程环境]并行期间自动被删除?

多线程如何并发访问SQLite数据库

多线程嵌入式软件中的原子操作

是否应该序列化对存储在 hsqldb 数据库中的文件的访问?

如何在多线程环境中使用嵌入式 MySQL?

项目中怎么控制多线程高并发访问