HSQLDB 数据文件变大优化处理
1.问题
hsqldb在频繁的增删改后,删除数据占据的空间并没有释放,我称之为空闲空间,data文件大小默认是不会变化的,随着时间的跨越,data文件会不断变大,默认hsqldb data文件上限是2G,这个是由于hsqldb是由纯java开发,读取文件的一个上限吧,达到这个上限,hsqldb就无法启动,问题就随之产生。
2.解决办法
(1)用SQL执行SHUTDOWN COMPACT
弊端:此种方式会回收空闲空间,但同时也会停止掉hsqldb服务,此种方式在需要hsqldb服务一直开启的应用中不可取
(2)用SQL执行CHECKPOINT DEFRAG(亲自实践可行)
推荐理由:此种方式立即回收空闲空间,而且不会关闭hsqldb服务
(3)在配置文件***.script文件中设置SET CHECKPOINT DEFRAG 200;
解释:当空闲空间大小达到200M的时候开始回收,具体大小可以自行更改
3.建议
个人建议把回收空间的处理放入quartz定时调度任务中,比如每日晚上11点或者每周一或者每月起始日开始回收空间,具体时间可以由cron表达式设置,根据个人项目中data文件大小达到2G的时间跨越而定。
4.代码
(1)在spring-service.xml中增加bean配置
<bean id="hsqldbService" class="com.***.***.***.client.service.impl.HsqldbServiceImpl" autowire="byName"> </bean>
(2)在spring-job.xml中增加调度配置
<bean id="hsqldbCheckpointDefragJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="hsqldbService" /> <property name="targetMethod" value="checkpointDefrag" /> </bean> <bean id="hsqldbCheckpointDefragTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="hsqldbCheckpointDefragJob" /> <property name="cronExpression" value="0 0 3 * * ?" /><!-- 每天凌晨3点执行一次碎片回收 --> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="hsqldbCheckpointDefragTrigger" /> </list> </property> </bean>
(3)HsqldbServiceImpl代码
public interface HsqldbService { /** * recovery free space in hsqldb */ public void checkpointDefrag(); }
public class HsqldbServiceImpl implements HsqldbService { /** * recovery free space in hsqldb */ @Override public void checkpointDefrag() { Connection conn = null; Statement stmt = null; try { Class.forName("org.hsqldb.jdbcDriver"); conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001/hsqldbname","sa", ""); stmt = conn.createStatement(); stmt.execute("CHECKPOINT DEFRAG"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { if (stmt!=null) { stmt.close(); } if (conn!=null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
5.附件为HSQLDB中文手册
相关推荐
标题 "hsqldb相关几个文件" 提到的是与HSQldb相关的压缩包资源,HSQldb是一个开源的关系型数据库管理系统,特别适用于Java应用程序。描述中提及的有两个zip文件:hsqldb_1_8_0_10.zip 和 hsqldb-mini.zip,以及一个...
- **SQL兼容性**:HSQLDB高度遵循SQL-92和SQL:2003标准,支持大部分SQL语法,方便开发人员进行数据库操作。 - **多模式支持**:HSQLDB支持单用户模式、服务器模式和文件模式,能满足不同场景的需求。 - **事务处理**...
HSQldb的一大特点是支持标准SQL语法,这使得开发人员可以使用熟悉的SQL命令进行数据操作,而无需学习新的查询语言。同时,HSQldb提供了丰富的JAVA接口,包括JDBC驱动程序,使得开发者能够轻松地在Java应用程序中集成...
3. 性能优化:HSQldb可能会提供一些优化工具或库,如连接池管理器,以提高数据库的并发处理能力和资源利用效率。 4. 数据序列化/反序列化库:如果涉及到将数据库对象序列化到文件或网络传输,可能需要额外的序列化...
- **高速度**: HSQLDB采用优化的查询处理算法,提供快速的数据存取和处理能力。 - **多模式**: 支持内存模式(所有数据都存储在内存中)、文件模式(数据存储在磁盘文件中)和服务器模式,满足不同需求。 - **SQL...
1. **性能提升**:新版本可能对查询处理、磁盘I/O和内存管理进行了优化,从而提高了数据读写速度和整体响应时间,使得HSQldb在处理大量数据时表现更佳。 2. **增强的SQL支持**:HSQldb致力于遵循SQL标准,1.9.0版本...
HSQLDB的性能可以通过调整内存大小、使用存储引擎类型(内存或文件)、索引策略等方式进行优化。在处理大量数据时,合理设计表结构和索引能显著提升查询效率。 总之,HSQLDB是一款强大且灵活的数据库解决方案,无论...
- **SQL支持**:HSQLDB支持大部分SQL标准,包括SQL92、SQL99等。 - **JDBC支持**:提供JDBC驱动程序,便于Java应用程序连接和操作数据库。 #### 五、SQL问题详解 - **对SQL标准的支持**:HSQLDB遵循并扩展了SQL标准...
3. 高性能:HSQLDB采用优化的查询引擎,能快速处理大量数据,提供高效的读写性能。 4. SQL兼容性:HSQLDB支持SQL:2008标准,提供丰富的SQL语句支持,包括事务、索引、视图、存储过程等。 5. 多种模式:HSQLDB支持单...
4. **支持SQL标准**:HSQldb兼容大部分SQL92和SQL99标准,提供丰富的SQL语句支持。 5. **嵌入式数据库**:HSQldb可以作为一个类库直接嵌入到Java应用程序中,无需单独安装数据库服务器。 6. **多模式运行**:...
其优势在于快速启动、易于部署和管理,但处理大规模并发和复杂业务场景时可能略显不足。 总结,HSQldb 2.3.4是一款强大而实用的轻量级数据库解决方案,尤其适合Java开发者使用。其简洁的设计、全面的SQL支持以及...
1. **下载与解压**:可以从官方站点下载hsqldb-2.3.3.zip压缩包,解压后得到HSQldb的库文件。 2. **运行数据库**:通过Java命令行,加载hsqldb.jar并启动数据库服务器。 3. **连接数据库**:使用JDBC驱动程序,通过...
HSQLDB的安装非常简单,只需要下载`hsqldb.jar`文件即可。该文件通常位于HSQLDB的`lib`目录下。可以从HSQLDB官方网站(http://hsqldb.sourceforge.net)下载最新版本的发布包、源代码和文档。 - **步骤**: - 下载...
《HSQldb数据库详解及其数据文件管理》 HSQldb(HyperSQL Database)是一款轻量级、开源的关系型数据库管理系统,适用于嵌入式系统和独立应用程序。它支持SQL标准,并且能够在Java环境中运行,无需安装,是开发人员...
首先,你需要在项目的`lib`目录下添加所需的库文件,包括Hibernate的jar包(如hibernate-core.jar、hibernate-entitymanager.jar等)和HSQldb的jar包(hsqldb.jar)。这些库文件提供了对数据库操作和ORM的支持。 ##...