2012-12-17 31 views
5

Tôi đang sử dụng cơ sở dữ liệu HSQLDB trong Java lưu trữ tệp trong một cột được định nghĩa là BLOB.Kích thước tệp HSQLDB và .lobs

Khi tôi thêm hàng trong bảng có tệp/BLOB vào bảng, tệp .lobs sẽ tăng kích thước của tệp/BLOB. Khi tôi thêm một tệp khác vào bảng của tôi, nó sẽ tăng kích thước một lần nữa (kích thước 2 x BLOB).

Vì vậy, tôi đã triển khai phương pháp thử nghiệm lặp lại 10 lần và ghi cùng một tệp vào bảng của tôi và xóa nó ngay sau khi chèn.

Bây giờ, tệp .lobs của tôi có kích thước 10 x tệp ... mặc dù tôi đã xóa tất cả các hàng trong bảng chứa tệp.

Tôi đã cố gắng thực thi CHECKPOINT DEFRAG nhưng không có gì xảy ra. Tệp .lobs ở cùng kích thước tệp. Điều này làm tôi lo lắng vì ứng dụng web của tôi mà tôi đang tạo sẽ ghi nhiều tệp vào cơ sở dữ liệu của tôi và ngay cả khi các hàng trong bảng có tệp (BLOB) sau một thời gian sẽ bị xóa tệp .lobs sẽ luôn tăng hoặc ở cùng kích thước và cuối cùng ăn hết không gian đĩa của tôi.

Tôi có thiếu một số cài đặt hoặc đây có phải là hành vi mong đợi của HSQLDB và BLOB không?

Cảm ơn rất nhiều!

Trân trọng, Andreas

Trả lời

1

Điều này là bình thường.

Tất cả các khoảng trống đã xóa được ghi lại. Sau một CHECKPOINT, các khoảng trống được tái sử dụng nếu bạn chèn các thùy mới.

Trong cơ sở dữ liệu sản xuất có các chu kỳ lặp lại chèn và xóa. Trong lần chạy nhật ký, kích thước tệp .lobs sẽ không vượt quá kích thước thực tế của các thùy trong cơ sở dữ liệu bởi một số lượng rất lớn.

Cập nhật:

Lý do cho .lobs tập tin để phát triển cho đến khi một trạm kiểm soát là cho phép phục hồi dữ liệu trong trường hợp có một hệ thống sụp đổ.

HSQLDB phiên bản 2.3.0 và các phiên bản sau này cắt bớt tệp .lobs tại CHECKPOINT nếu có khoảng trống ở cuối tệp sau khi xóa cụm.

+0

Hmm, tôi đã làm một thử nghiệm khác. Đã chèn BLOB và ngay sau khi xóa nó. Đã làm điều này cho 1000 lần lặp lại và kích thước BLOB trong đó ~ 8 MB. Kết quả: tệp .lobs của sự kiện ~ 9 GB mặc dù không có dữ liệu trong cơ sở dữ liệu của tôi. – andreas78

+0

... tiếp tục ... Tôi đang mua khe máy chủ của mình trên đám mây và mỗi MB chi phí cho tôi tiền tôi thực sự không thích tệp .lobs phân bổ 9 GB dữ liệu khi cơ sở dữ liệu của tôi trống. Tôi đơn giản của tôi tâm tập tin .lobs sẽ trong kịch bản này không bao giờ vượt quá 8 MB kể từ khi tôi thêm BLOB và sau đó xóa cùng một BLOB. Tại sao tăng tập tin .lobs nhiều hơn 8 MB khi tôi không bao giờ đồng thời lưu trữ hơn 8 MB? – andreas78

+0

Sau khi chạy chính xác cùng một bộ thử nghiệm sử dụng H2 tôi có thể nói như sau: H2 sử dụng tối đa ~ 1 GB để chèn 1000 x 8 MB tệp trong tệp db. H2 khi thêm và ngay sau khi xóa sử dụng ~ 68 MB trong tệp db. H2 khi thả cơ sở dữ liệu/bảng làm giảm kích thước tệp db. Điều này khiến tôi nghĩ nếu H2 là lựa chọn tốt hơn nếu tôi muốn giảm mức sử dụng dung lượng đĩa. – andreas78

Các vấn đề liên quan