clickhouse.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package bootstrap
  2. import (
  3. "designs/config"
  4. "designs/global"
  5. "fmt"
  6. "go.uber.org/zap"
  7. "gorm.io/driver/clickhouse"
  8. "gorm.io/gorm"
  9. "time"
  10. )
  11. func InitClickhouseGorm() *gorm.DB {
  12. UserName := config.Get("clickhouse.userName")
  13. Password := config.Get("clickhouse.password")
  14. Host := config.Get("clickhouse.host")
  15. Port := config.Get("clickhouse.port")
  16. Database := config.Get("clickhouse.database")
  17. dsn := fmt.Sprintf("tcp://%s:%s?database=%s&username=%s&password=%s", Host, Port, Database, UserName, Password)
  18. clickConfig := clickhouse.Config{
  19. DSN: dsn,
  20. }
  21. if db, err := gorm.Open(clickhouse.New(clickConfig), &gorm.Config{
  22. Logger: getGormLogger(), // 使用自定义 Logger
  23. }); err != nil {
  24. global.App.Log.Error("clickhouse connect failed, err:", zap.Any("err", err))
  25. return nil
  26. } else {
  27. sqlDB, _ := db.DB()
  28. sqlDB.SetMaxIdleConns(5) // 空闲连接数 ≈ 平均QPS * 平均查询时间(秒)
  29. sqlDB.SetMaxOpenConns(20) // 最大连接数 ≈ 2 * CPU核心数
  30. sqlDB.SetConnMaxLifetime(30 * time.Minute) // 连接最大存活时间
  31. sqlDB.SetConnMaxIdleTime(5 * time.Minute) // 连接最大空闲时间
  32. //initMySqlTables(db)
  33. return db
  34. }
  35. }