使用hsqldb时,缓存的表不会缓存,而是在内存中

Cla*_*Bao 3 caching hsqldb

我正在尝试hsqldb 2.2.5版的缓存表功能.

只是使用JDBC批量插入到一个表中,奇怪的是如果我单独运行我的测试,虽然我使用了创建缓存表,但它仍然使用内存模式,因为在100,0000条记录之后,OOM.

但是,如果我在此测试用例或使用之前运行其他测试jdbc:hsqldb:mem:HSQLDB;hsqldb.default_table_type=cached ,它将使用缓存表.

无论如何,我不想使用缓存默认.

缓存表性能在2600000条记录之后 看起来如此 ,性能下降了不少.在3600000条记录之后,它变得非常缓慢

也许一些索引占用内存完全使JVM变得缓慢.不是因为db本身

两个子问题

1)强制缓存表的任何其他配置是否使用缓存模式?

2)任何db配置都有助于提高缓存表的性能?

(使用JDK1.6 -Xmx1024m)

fre*_*edt 6

您报告的URL是mem:(内存中的所有内容 - 无持久性)数据库.在此设置中,简单地忽略CACHED表的任何引用或设置,并将数据存储在内存中.

可用的CACHED表功能是file:(持久存储到磁盘)数据库.这些数据库还支持持久性MEMORY表(所有数据都存储在内存中).CACHED和MEMORY表的数据都存储在file:数据库的磁盘上.

关于CACHED的执行,最近使用的行被缓存在内存中,当缓存变满时,更改将保存到磁盘.

数据库引擎使用java.nio方法访问磁盘上大于16MB且低于特定限制的数据库.要提高性能,可以使用hsqldb.nio_max_size属性或等效的SQL语句来增加限制.

通常,磁盘在随机访问模式下很慢(每秒最多100次访问).使用缓存,nio和其他策略可以减少有效访问时间,但仅在某种程度上.

另请注意,您可以在批量插入期间关闭数据日志记录,并再次将其打开以进行正常的数据库操作.

本指南的本章介绍了这些问题和设置.

http://hsqldb.org/doc/2.0/guide/deployment-chapt.html