Spring boot 基于文件的数据库-HSQLDB:35MB,H2:85MB

Spring boot 基于文件的数据库-HSQLDB:35MB,H2:85MB,spring-boot,spring-data-jpa,h2,hsqldb,Spring Boot,Spring Data Jpa,H2,Hsqldb,我在数据库中存储了500.000条记录,每条记录大约50个字符。每小时数据库就会被清除并插入500k记录 我通常更喜欢H2,但我不明白为什么database.mv的大小是85 MB(甚至在清除和恢复200 MB之后)。 我也试过hsqldb,它一直只用35MB 我使用具有以下特性的弹簧靴: H2: HSQLDB: spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.datasource.url = jdbc:

我在数据库中存储了500.000条记录,每条记录大约50个字符。每小时数据库就会被清除并插入500k记录

我通常更喜欢H2,但我不明白为什么database.mv的大小是85 MB(甚至在清除和恢复200 MB之后)。 我也试过hsqldb,它一直只用35MB

我使用具有以下特性的弹簧靴: H2:

HSQLDB:

spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.url = jdbc:hsqldb:file:data
spring.datasource.username=sa
spring.datasource.password=
你的问题是什么

在H2中使用持久数据库。H2有两个存储后端。默认的是基于MVStore的,它更适合于具有高数据争用的多线程应用程序,但它也使用了一个写时拷贝数据策略,并且它有自己的成本。大规模更新可以显著增加数据库的大小。当然,空间将在以后重新使用。遗留PageStore后端在此类用例中表现更好,但它使用表级锁,并且不会并行执行来自不同会话的多个命令。MVStore和PageStore都可以在必要时从磁盘读取数据,大型数据库不需要太多内存

默认情况下,HSQLDB保存内存中的所有内容,但其存储格式更紧凑。它也不会为索引使用额外的空间,因为表将在内存中完全加载。当然,你不能用那种方式使用真正大的桌子。HSQLDB也有普通的磁盘表,您可以使用
create CACHED TABLE
创建这样的表,这些表以完全不同的格式存储,并且比基于内存的表占用更多的磁盘空间。但是,与H2中的持久表相比,这样的表仍然可以使用更少的空间

如果要在H2中使用内存中的表,则需要使用
create memory TABLE
创建它们,它们使用的磁盘内存量较小。默认情况下,H2不会创建这样的磁盘效率和内存效率低下的表

spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.url = jdbc:hsqldb:file:data
spring.datasource.username=sa
spring.datasource.password=