Questo post parte da questa risposta ad una domanda posta sul repository ufficiale di boltdb.
Nella domanda si chiede come ridurre la dimensione di un database bolt dopo aver cancellato un certo numero di buckets al suo interno.
La risposta ci conduce alla riflessione che per ridurre la dimensione di un database bolt non è sufficiente cancellarne i buckets, bensì è necessario eseguire una copia uno a uno dei buckets rimasti nel db in un altro bolt file.
Nella risposta si suggerisce di scrivere un programma che iteri per ogni buckets copiandolo in un nuovo db file. Questa opzione la lascerò per un articolo successivo dove scriverò uno script che esegua una copia di tutti i buckets presenti in un boltdb in un altro.
Per ora utilizzeremo boltcopy, uno script in Go che permette di copiare i buckets da un boltdb file ad uno nuovo, ma che ha come limitazione quello di non supportare buckets annidati.
Come ridurre la dimensione di un boltdb file con boltcopy
Anzitutto è necessario installare lo script Go e per farlo usiamo il seguente comando
go install https://github.com/jessepeterson/boltcopy@latest
Rechiamoci ora nella cartella /home/go/bin dove troveremo un binary file chiamato boltcopy pronto per essere invocato con questo comando
./boltcopy my-database.boltdb my-new-database.boltdb
Attendiamo che il programma effettui la copia. Il tempo dipende in base alla dimensione del database di partenza.
Ricordiamo che questa operazione è da eseguire successivamente all’eliminazione di buckets dal nostro boltdb. Per gestire con semplicità questa operazione possiamo utilizzare boltbrowser, un altro programma scritto in Go che permette di visualizzare ed editare i buckets contenuti nel nostro database.