2012-12-17 39 views
5

我正在使用Java中的HSQLDB數據庫,它將文件存儲在定義爲BLOB的列中。HSQLDB和.lobs文件大小

當我向表中添加一個帶有文件/ BLOB的錶行時,.lobs文件會增加文件/ BLOB的大小。當我添加另一個文件到我的表時,它又增加了大小(2 x BLOB大小)。

因此,我實現了一個迭代10次的測試方法,並將相同的文件寫入我的表並在插入後立即刪除它。

現在,我的.lobs文件是10 x文件大小...即使我刪除了包含該文件的所有錶行。

我試着執行CHECKPOINT DEFRAG,但沒有任何反應。 .lobs文件保持相同的文件大小。

這使我很擔心,因爲我正在創建的webapp會將很多文件寫入我的數據庫,即使帶有文件(BLOB)的錶行將在一段時間後被刪除,.lobs文件將始終增加或保持相同的大小,並最終吃掉我所有的磁盤空間。

我是否缺少一些設置,或者這是HSQLDB和BLOB的預期行爲?

非常感謝!

親切的問候, 安德烈亞斯

回答

1

這是正常的。

所有被刪除的lob空間都被記錄下來。在CHECKPOINT後,如果插入新的lobs,空間將被重新使用。

在生產數據庫中存在重複循環的插入和刪除操作。在日誌運行中,.lobs文件大小不會超過數據庫中實際大小的大小。

更新:

原因.lobs文件增長,直到檢查點是爲了讓數據恢復的情況下,有一個系統崩潰。

HSQLDB版本2.3.0及更高版本在CHECKPOINT處截斷.lobs文件,如果在刪除lob後文件末尾有空白空間。

+0

嗯,我做了另一個測試。插入一個BLOB,然後刪除它。這是1000次迭代和BLOB大小在哪裏〜8 MB。 結果:〜9 GB事件的.lobs文件,雖然我的數據庫中沒有數據。 – andreas78

+0

...繼續... 我在雲端購買我的服務器插槽,每MB磁盤花錢我真的不喜歡.lobs文件在我的數據庫爲空時分配9 GB的數據。 我很簡單,在這種情況下,.lobs文件將永遠不會超過8 MB,因爲我添加了BLOB,然後刪除了相同的BLOB。當我從不同時存儲超過8 MB的文件時,爲什麼增加超過8 MB的.lobs文件? – andreas78

+0

使用H2運行完全相同的測試套件後,我可以聲明以下內容: H2在數據庫文件中插入1000 x 8 MB文件時使用最大值〜1 GB。 H2在添加時和在刪除後立即在db文件中使用〜68 MB。 H2在刪除數據庫/表時會減小數據庫文件的大小。 這讓我想到如果我想減少磁盤空間使用量,H2是更好的選擇。 – andreas78