package kvstore import ( "time" "github.com/dgraph-io/badger/v4" "github.com/dgraph-io/badger/v4/options" "github.com/timshannon/badgerhold/v4" ) func createDB(dbDir string, logger badger.Logger) (*badgerhold.Store, error) { isInMemory := len(dbDir) <= 0 opts := badger.DefaultOptions(dbDir) opts.Logger = logger if isInMemory { opts.InMemory = true } else { opts.Compression = options.ZSTD } db, err := badgerhold.Open(badgerhold.Options{ Encoder: badgerhold.DefaultEncode, Decoder: badgerhold.DefaultDecode, SequenceBandwith: 100, Options: opts, }) if err != nil { return nil, err } if !isInMemory { ticker := time.NewTicker(30 * time.Minute) go func() { for { <-ticker.C if err := db.Badger().RunValueLogGC(0.5); err != nil && err != badger.ErrNoRewrite { logger.Errorf("%s", err) } } }() } return db, nil }