为什么H2不将BLOB存储为单独的文件



我使用的是嵌入式H2 v1.4-MVStore、Spring和JPA

现在H2文件显示

默认情况下,此数据库存储与主表数据分离的大型LOB(CLOB和BLOB(对象。小LOB对象存储到位,

这是我所期望的——然而,无论出于何种原因,H2仍在将大型BLOB内容推送到主数据库文件中。我曾尝试将MAX_LENGTH_INPLACE_LOB设置为1甚至0之类的值,但这并没有带来任何区别。如何强制H2开始将Blob保存为单独的文件?

实体中定义的字段

@Lob
private Blob source;

我也尝试过将byte[]@Column(definition="BLOB")一起使用,但结果完全相同

Blob创建(

Session session = entityManager.unwrap(Session.class);
return Hibernate.getLobCreator(session).createBlob(inputStream, inputStream.available());

保存/读取工作得很好-唯一的问题是我宁愿将Blob作为单独的文件

文档不讨论单独的文件,并且不能强制H2使用它们。

每个表都有一个主索引,所有数据都存储在该索引中。当数据库读取一行时,它会读取整行及其所有列。较大的值可能会产生明显的开销。但LOB值(不包括不超过MAX_LENGTH_INPLACE_LOB的小值(是单独存储的,在读取行时不会访问,所以它们不会产生开销。只有当应用程序读取其内容时,才会读取LOB对象。

有些查询不使用主索引。例如,如果在(A, B)列上有索引,则查询SELECT B FROM tableName WHERE A = ?将仅使用该索引。SELECT B, C … WHERE A = ?将使用该索引和主索引。但这与你的问题没有直接关系

最新更新