`

HSQLDB 文件 变大 优化处理

阅读更多
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中文手册

 

 

1
2
分享到:
评论

相关推荐

    hsqldb相关几个文件

    标题 "hsqldb相关几个文件" 提到的是与HSQldb相关的压缩包资源,HSQldb是一个开源的关系型数据库管理系统,特别适用于Java应用程序。描述中提及的有两个zip文件:hsqldb_1_8_0_10.zip 和 hsqldb-mini.zip,以及一个...

    HSQLDB

    - **SQL兼容性**:HSQLDB高度遵循SQL-92和SQL:2003标准,支持大部分SQL语法,方便开发人员进行数据库操作。 - **多模式支持**:HSQLDB支持单用户模式、服务器模式和文件模式,能满足不同场景的需求。 - **事务处理**...

    hsqldb-2.2.8数据库

    HSQldb的一大特点是支持标准SQL语法,这使得开发人员可以使用熟悉的SQL命令进行数据操作,而无需学习新的查询语言。同时,HSQldb提供了丰富的JAVA接口,包括JDBC驱动程序,使得开发者能够轻松地在Java应用程序中集成...

    hsqldb-lib.zip

    3. 性能优化:HSQldb可能会提供一些优化工具或库,如连接池管理器,以提高数据库的并发处理能力和资源利用效率。 4. 数据序列化/反序列化库:如果涉及到将数据库对象序列化到文件或网络传输,可能需要额外的序列化...

    HSQLDB数据库

    - **高速度**: HSQLDB采用优化的查询处理算法,提供快速的数据存取和处理能力。 - **多模式**: 支持内存模式(所有数据都存储在内存中)、文件模式(数据存储在磁盘文件中)和服务器模式,满足不同需求。 - **SQL...

    hsqldb的最新版本

    1. **性能提升**:新版本可能对查询处理、磁盘I/O和内存管理进行了优化,从而提高了数据读写速度和整体响应时间,使得HSQldb在处理大量数据时表现更佳。 2. **增强的SQL支持**:HSQldb致力于遵循SQL标准,1.9.0版本...

    <转>HSQLDB 安装与使用

    HSQLDB的性能可以通过调整内存大小、使用存储引擎类型(内存或文件)、索引策略等方式进行优化。在处理大量数据时,合理设计表结构和索引能显著提升查询效率。 总之,HSQLDB是一款强大且灵活的数据库解决方案,无论...

    HSQLDB中文帮助文档

    - **SQL支持**:HSQLDB支持大部分SQL标准,包括SQL92、SQL99等。 - **JDBC支持**:提供JDBC驱动程序,便于Java应用程序连接和操作数据库。 #### 五、SQL问题详解 - **对SQL标准的支持**:HSQLDB遵循并扩展了SQL标准...

    HSQLDB_guide

    3. 高性能:HSQLDB采用优化的查询引擎,能快速处理大量数据,提供高效的读写性能。 4. SQL兼容性:HSQLDB支持SQL:2008标准,提供丰富的SQL语句支持,包括事务、索引、视图、存储过程等。 5. 多种模式:HSQLDB支持单...

    开源数据库软件hsqldb

    4. **支持SQL标准**:HSQldb兼容大部分SQL92和SQL99标准,提供丰富的SQL语句支持。 5. **嵌入式数据库**:HSQldb可以作为一个类库直接嵌入到Java应用程序中,无需单独安装数据库服务器。 6. **多模式运行**:...

    hsqldb-2.3.4

    其优势在于快速启动、易于部署和管理,但处理大规模并发和复杂业务场景时可能略显不足。 总结,HSQldb 2.3.4是一款强大而实用的轻量级数据库解决方案,尤其适合Java开发者使用。其简洁的设计、全面的SQL支持以及...

    hsqldb-2.3.3.zip

    1. **下载与解压**:可以从官方站点下载hsqldb-2.3.3.zip压缩包,解压后得到HSQldb的库文件。 2. **运行数据库**:通过Java命令行,加载hsqldb.jar并启动数据库服务器。 3. **连接数据库**:使用JDBC驱动程序,通过...

    HSQLDB 中文文档

    HSQLDB的安装非常简单,只需要下载`hsqldb.jar`文件即可。该文件通常位于HSQLDB的`lib`目录下。可以从HSQLDB官方网站(http://hsqldb.sourceforge.net)下载最新版本的发布包、源代码和文档。 - **步骤**: - 下载...

    hsqldb data

    《HSQldb数据库详解及其数据文件管理》 HSQldb(HyperSQL Database)是一款轻量级、开源的关系型数据库管理系统,适用于嵌入式系统和独立应用程序。它支持SQL标准,并且能够在Java环境中运行,无需安装,是开发人员...

    hsqldb整合hibernate

    首先,你需要在项目的`lib`目录下添加所需的库文件,包括Hibernate的jar包(如hibernate-core.jar、hibernate-entitymanager.jar等)和HSQldb的jar包(hsqldb.jar)。这些库文件提供了对数据库操作和ORM的支持。 ##...

Global site tag (gtag.js) - Google Analytics