init.go 1.1 KB

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