5

我在 Java 中使用 HSQLDB 数据库,它将文件存储在定义为 BLOB 的列中。

当我将带有文件/BLOB 的表行添加到我的表中时,.lobs 文件会增加文件/BLOB 的大小。当我将另一个文件添加到我的表中时,它的大小再次增加(2 x BLOB 大小)。

所以,我实现了一个测试方法,它迭代 10 次并将同一个文件写入我的表并在插入后立即将其删除。

现在,我的 .lobs 文件是 10 x 文件大小......即使我已经删除了包含该文件的所有表行。

我试图执行 CHECKPOINT DEFRAG 但没有任何反应。.lobs 文件保持相同的文件大小。

这让我很担心,因为我正在创建的 webapp 将向我的数据库写入大量文件,即使带有文件 (BLOB) 的表行将在一段时间后被删除,.lobs 文件将始终增加或保持不变大小并最终吃掉我所有的磁盘空间。

我是否缺少某些设置,或者这是 HSQLDB 和 BLOB 的预期行为?

非常感谢!

亲切的问候,安德烈亚斯

4

1 回答 1

2

这个是正常的。

记录所有删除的 lob 空间。在 CHECKPOINT 之后,如果您插入新的 l​​ob,则会重复使用这些空间。

在生产数据库中,插入和删除的循环不断重复。在日志运行中,.lobs 文件大小不会超过数据库中 lobs 的实际大小非常大的量。

更新:

.lobs 文件增长到检查点的原因是为了在系统崩溃的情况下允许数据恢复。

HSQLDB 2.3.0 及更高版本在删除 lob 后,如果文件末尾有空白空间,则会在 CHECKPOINT 截断 .lobs 文件。

于 2012-12-17T20:08:43.640 回答