init.go 991 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package task_queue
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
  4. "github.com/dgraph-io/badger/v3"
  5. "path/filepath"
  6. "time"
  7. )
  8. func GetDb() *badger.DB {
  9. if dbBase == nil {
  10. var err error
  11. opt := badger.DefaultOptions(getDbName())
  12. // 1MB
  13. opt.ValueLogFileSize = 1 << 20
  14. // 10 MB
  15. opt.MemTableSize = 10 << 20
  16. // 这边数据库会自动创建这个目录文件
  17. dbBase, err = badger.Open(opt)
  18. if err != nil {
  19. panic(err)
  20. }
  21. go badgerGC(dbBase)
  22. }
  23. return dbBase
  24. }
  25. func DelDb() error {
  26. if dbBase != nil {
  27. _ = dbBase.Close()
  28. }
  29. return my_folder.ClearFolder(getDbName())
  30. }
  31. func getDbName() string {
  32. return filepath.Join(my_folder.GetConfigRootDirFPath(), dbFileName)
  33. }
  34. func badgerGC(_dbBase *badger.DB) {
  35. ticker := time.NewTicker(5 * time.Second)
  36. defer ticker.Stop()
  37. for range ticker.C {
  38. again:
  39. err := _dbBase.RunValueLogGC(0.5)
  40. if err == nil {
  41. goto again
  42. }
  43. }
  44. }
  45. const (
  46. dbFileName = "task_queue"
  47. )
  48. var dbBase *badger.DB