2012-12-17 5 views
5

BLUE로 정의 된 열에 파일을 저장하는 Java의 HSQLDB 데이터베이스를 사용하고 있습니다.HSQLDB 및 .lobs 파일 크기

파일/BLOB 테이블 행을 내 테이블에 추가하면 .lobs 파일의 크기가 파일/BLOB가 증가합니다. 내 테이블에 다른 파일을 추가하면 크기가 다시 증가합니다 (2 x BLOB 크기).

그래서 10 회 반복하고 동일한 파일을 내 테이블에 쓰고 삽입 직후에 삭제하는 테스트 메소드를 구현했습니다.

이제 .lobs 파일은 파일이 포함 된 모든 테이블 행을 삭제했지만 10x 파일 크기입니다.

CHECKPOINT DEFRAG를 실행하려고했지만 아무 일도 발생하지 않았습니다. .lobs 파일은 동일한 파일 크기를 유지합니다.

내 웹 응용 프로그램이 데이터베이스에 많은 양의 파일을 쓸 것이므로 걱정할 필요가 있습니다. 파일 (BLOB)이있는 테이블 행이 잠시 후에 삭제 되더라도 .lobs 파일은 항상 증가하거나 증가합니다. 같은 크기로 유지하고 결국 모든 디스크 공간을 사용하십시오.

일부 설정이 누락되었거나 HSQLDB 및 BLOB의 예상되는 동작입니까?

고맙습니다.

종류와 관련, 안드레아스

답변

1

이것은 정상입니다.

삭제 된 모든 LOB 공백이 기록됩니다. CHECKPOINT 이후에 새 LOB를 삽입하면 공백이 다시 사용됩니다.

프로덕션 데이터베이스에는 삽입 및 삭제주기가 반복됩니다. 로그 실행에서 .lobs 파일 크기는 데이터베이스의 실제 파일 크기를 매우 크게 초과하지 않습니다.

업데이트 : 체크 포인트 시스템 충돌이 경우 데이터를 복구 할 수 있도록하는 것입니다 때까지 .lobs 파일이 증가 할

이유.

HSQLDB 버전 2.3.0 이상에서는 LOB를 삭제 한 후 파일 끝에 빈 공간이 있으면 CHECKPOINT에서 .lobs 파일을 자릅니다.

+0

음, 다른 테스트를 수행했습니다. BLOB를 삽입 한 후 바로 삭제했습니다. 1000 반복 및 BLOB 크기에 대해 ~ 8 MB를 사용 했습니까? 결과 : 데이터베이스에 데이터가 없지만 ~ 9GB 이벤트의 .lobs 파일. – andreas78

+0

... 계속 ... 클라우드에서 내 서버 슬롯을 구입할 때마다 디스크의 모든 MB가 비용이 들지만 실제로 데이터베이스가 비어있는 경우 .lobs 파일에 9GB의 데이터를 할당하는 것이 마음에 들지 않습니다. BLOB를 추가하고 동일한 BLOB를 삭제할 때부터이 시나리오에서 .lobs 파일이 8MB를 초과하지 않습니다. 8MB 이상의 공간을 동시에 저장할 필요가 없으면 왜 .lobs 파일을 8MB 이상 늘리십니까? – andreas78

+0

H2를 사용하여 정확히 동일한 테스트 스위트를 실행 한 후 다음을 설명 할 수 있습니다. H2는 1000x8 MB 파일을 db- 파일에 삽입 할 때 최대 1GB를 사용합니다. H2를 추가하고 삭제 직후에는 db 파일에서 ~ 68MB를 사용합니다. H2 데이터베이스/테이블을 삭제할 때 db 파일 크기가 줄어 듭니다. 디스크 공간 사용을 줄이려면 H2가 더 나은 선택인지 생각하게 만듭니다. – andreas78