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

标签 hsqldb caching

我正在尝试 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/

相关文章:

java - 如何在关闭后以编程方式重新启动HSQLDB(文件模式)?

caching - 如何在运行时在 Application.conf 中添加条目?

Javascript 停止使用 HTML5 list 文件

spring - 如何在每次单元测试后重置我的数据库状态而不使整个测试成为事务?

java - 从 JPA/EclipseLink 生成内存中的 HSQLDB 表(无文件)

java - 有关 OpenJPA 的 HSQLdb 权限

asp.net - 如何验证ASP.NET MVC OutputCache是​​否可在服务器上正常工作?

c# - ASP.NET MVC 3 中注销时清理浏览器缓存和 cookie 的问题

java - 如何在tomcat/java中仅在特定时期内存储一个值

sql - 我如何创建 "recursive sql"