2012-12-17 14 views
5

Utilizzo un database HSQLDB in Java che memorizza i file in una colonna definita come BLOB.Dimensioni file HSQLDB e .lobs

Quando aggiungo una riga di tabella con un file/BLOB alla mia tabella, il file .lobs aumenta di dimensioni del file/BLOB. Quando aggiungo un altro file alla mia tabella, aumenta di nuovo di dimensione (2 x dimensione BLOB).

Quindi, ho implementato un metodo di test che itera 10 volte e scrive lo stesso file sulla mia tabella e lo elimina subito dopo l'inserimento.

Ora, il mio file .lobs è di 10 x dimensioni del file ... anche se ho cancellato tutte le righe della tabella che contenevano il file.

Ho provato ad eseguire DEPUTTO CHECKPOINT ma non succede nulla. Il file .lobs mantiene la stessa dimensione del file.

Questo mi preoccupa poiché la mia webapp che sto creando scriverà molti file nel mio database e anche se le righe della tabella con il file (BLOB) verranno eliminate dopo un certo tempo il file .lobs aumenterà sempre o rimanere nella stessa dimensione e alla fine mangiare tutto il mio spazio su disco.

Mi manca qualche impostazione o è questo il comportamento previsto di HSQLDB e BLOB?

Grazie mille!

saluti, Andreas

risposta

1

Questo è normale.

Tutti gli spazi vuoti cancellati vengono registrati. Dopo un CHECKPOINT, gli spazi vengono riutilizzati se si inseriscono nuovi lob.

In un database di produzione ci sono cicli ricorrenti di inserimento e cancellazione. Nell'esecuzione del registro, la dimensione del file .lobs non supererà la dimensione effettiva dei lob nel database di una quantità molto grande.

Aggiornamento:

Il motivo per il file .lobs a crescere fino a un punto di controllo è quello di consentire il recupero dei dati nel caso ci sia un crash di sistema.

HSQLDB versione 2.3.0 e versioni successive troncano il file .lobs in CHECKPOINT se vi è spazio vuoto alla fine del file dopo aver eliminato i lob.

+0

Hmm, ho fatto un altro test. Inserito un BLOB e subito dopo cancellato. Lo ha fatto per 1000 iterazioni e la dimensione BLOB dove ~ 8 MB. Risultato: un file .lobs di ~ 9 GB evento anche se non ci sono dati nel mio database. – andreas78

+0

... continua ... Sto acquistando il mio slot del server nel cloud e ogni MB di disco mi costa denaro Non mi piace il file .lobs che alloca 9 GB di dati quando il mio database è vuoto. Penso che il file .lobs in questo scenario non superi mai gli 8 MB da quando aggiungo il BLOB e quindi elimini lo stesso BLOB. Perché aumentare il file .lobs più di 8 MB quando non memorizzo mai più di 8 MB contemporaneamente? – andreas78

+0

Dopo aver eseguito la stessa suite di test utilizzando H2, è possibile specificare quanto segue: H2 utilizza il massimo ~ 1 GB per l'inserimento di file 1000 x 8 MB nel file db. H2 quando si aggiunge e subito dopo l'eliminazione utilizza ~ 68 MB nel file db. H2 quando si rilascia il database/tabella riduce le dimensioni del file db. Questo mi fa pensare se H2 è una scelta migliore se mi piacerebbe ridurre l'utilizzo dello spazio su disco. – andreas78