2012-12-17 13 views
5

Używam bazy danych HSQLDB w Javie, która przechowuje pliki w kolumnie zdefiniowanej jako BLOB.HSQLDB i .lobs rozmiar pliku

Kiedy dodaję wiersz tabeli z plikiem/BLOB do mojej tabeli, plik .lobs zwiększa rozmiar pliku/BLOBa. Kiedy dodaję kolejny plik do mojej tabeli, ponownie zwiększa się rozmiar (2 x rozmiar BLOBa).

Zaimplementowałem metodę testowania, która wykonuje 10 iteracji i zapisuje ten sam plik w mojej tabeli i usuwa go zaraz po wstawieniu.

Teraz mój plik .lobs ma rozmiar 10 x ... mimo że usunąłem wszystkie wiersze tabeli, które zawierały ten plik.

Próbowałem wykonać CHECKPOINT DEFRAG, ale nic się nie dzieje. Plik .lobs ma taki sam rozmiar pliku.

To mnie martwi, ponieważ moja aplikacja internetowa, którą tworzę, będzie pisała wiele plików do mojej bazy danych, a nawet jeśli wiersze tabeli z plikiem (BLOB) po pewnym czasie zostaną usunięte, plik .lobs zawsze będzie się zwiększał lub pozostań w tym samym rozmiarze iw końcu zjedz całą moją przestrzeń dyskową.

Czy brakuje jakiegoś ustawienia lub czy jest to oczekiwane zachowanie HSQLDB i BLOB?

Wielkie dzięki!

poważaniem, Andreas

Odpowiedz

1

to normalne.

Wszystkie skasowane spacje są rejestrowane. Po CHECKPOINT spacje są ponownie wykorzystywane, jeśli wstawisz nowe loby.

W produkcyjnej bazie danych istnieją powtarzające się cykle wstawiania i usuwania. W przebiegu dziennika rozmiar pliku .lobs nie przekroczy rzeczywistego rozmiaru plików w bazie danych o bardzo dużą wartość.

Aktualizacja:

Powodem plik .lobs rosnąć aż do punktu kontrolnego jest umożliwienie odzyskania danych w przypadku występowania awarii systemu.

HSQLDB wersja 2.3.0 i nowsze wersje obcinają plik .lobs w CHECKPOINT, jeśli na końcu pliku jest puste miejsce po usunięciu lobów.

+0

Hmm, zrobiłem kolejny test. Wstawiono obiekt BLOB i zaraz po jego usunięciu. Czy to na 1000 iteracji i rozmiar BLOB, gdzie ~ 8 MB. Wynik: plik .lobs o zdarzeniu ~ 9 GB, chociaż w bazie danych nie ma danych. – andreas78

+0

... ciąg dalszy ... Kupuję mój slot na serwer w chmurze, a każdy MB dysku kosztuje mnie pieniądze Naprawdę nie lubię pliku .lobs przydzielającego 9 GB danych, gdy moja baza danych jest pusta. I my simple mind plik .lobs w tym scenariuszu nigdy nie przekroczy 8 MB, ponieważ dodaję obiekt BLOB, a następnie usuwam ten sam obiekt BLOB. Po co zwiększać plik .lobs o ponad 8 MB, skoro nigdy nie przechowuję więcej niż 8 MB? – andreas78

+0

Po uruchomieniu dokładnie tego samego zestawu testów przy użyciu H2 można stwierdzić, że: H2 używa maksymalnie ~ 1 GB do wstawiania plików 1000 x 8 MB w pliku db. H2 podczas dodawania i zaraz po usunięciu używa ~ 68 MB w pliku db. H2 przy zrzucaniu bazy danych/tabeli zmniejsza rozmiar pliku db. To sprawia, że ​​myślę, jeśli H2 jest lepszym wyborem, jeśli chciałbym zmniejszyć wykorzystanie miejsca na dysku. – andreas78

Powiązane problemy