package bootstrap import ( "designs/config" "designs/global" "fmt" "go.uber.org/zap" "gorm.io/driver/clickhouse" "gorm.io/gorm" "time" ) func InitClickhouseGorm() *gorm.DB { UserName := config.Get("clickhouse.userName") Password := config.Get("clickhouse.password") Host := config.Get("clickhouse.host") Port := config.Get("clickhouse.port") Database := config.Get("clickhouse.database") dsn := fmt.Sprintf("tcp://%s:%s?database=%s&username=%s&password=%s", Host, Port, Database, UserName, Password) clickConfig := clickhouse.Config{ DSN: dsn, } if db, err := gorm.Open(clickhouse.New(clickConfig), &gorm.Config{ Logger: getGormLogger(), // 使用自定义 Logger }); err != nil { global.App.Log.Error("clickhouse connect failed, err:", zap.Any("err", err)) return nil } else { sqlDB, _ := db.DB() sqlDB.SetMaxIdleConns(5) // 空闲连接数 ≈ 平均QPS * 平均查询时间(秒) sqlDB.SetMaxOpenConns(20) // 最大连接数 ≈ 2 * CPU核心数 sqlDB.SetConnMaxLifetime(30 * time.Minute) // 连接最大存活时间 sqlDB.SetConnMaxIdleTime(5 * time.Minute) // 连接最大空闲时间 //initMySqlTables(db) return db } }