我正在尝试 hsqldb 版本 2.2.5 的缓存表功能。
只是使用 JDBC 批量插入一张表,奇怪的是如果
我单独运行我的测试,虽然我使用了 创建缓存表 ,
但它仍然使用内存模式,因为在之后100,0000 条记录 , OOM .
但是如果我在这个测试用例之前运行一些其他测试或使用 jdbc:hsqldb:mem:HSQLDB;hsqldb.default_table_type=cached
,它将使用缓存表。
无论如何,我不想使用缓存作为默认值。
缓存表性能如下所示
260万条记录后,性能下降很多。
在 3600000 条记录后,它变得很慢
也许某些索引完全占用内存使 JVM 变慢。
不是因为数据库本身
两个子问题
1)强制缓存表的任何其他配置正在使用缓存模式?
2)任何数据库配置将有助于提高缓存表的性能?
(使用 JDK1.6 -Xmx1024m)
最佳答案
您报告的 URL 适用于 mem:
(内存中的所有内容 - 没有持久性)数据库。在此设置中,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
关于hsqldb - 使用hsqldb时缓存的表不是缓存而是在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7389253/