背景:
随业务增长,表中数据量越来越大。业务方只查询近一周的数据。与研发确认log表只保留100w数据,定期转存到历史表中。这段时间刚好接触golang,顺便用这个小需求练练手。
前期准备:
- [go get github.com/go-sql-driver/mysql ]
- golang 1.18
目录结构:
`job_log`
| -- dbutil
| -- sqlutil.go
| -- go.mod
| -- go.sum
| -- logs
| -- alter.log
| -- logutil
| -- logutil.go
| -- testmain.go
//生成go.mod 和 go.sum文件
go mod init joblog
代码:
testmain.go
package main
import (
"joblog/dbutil"
//"joblog/logutil"
//"fmt"
)
//定时将job_log表中数据与入到history表中 然后清理掉log表数据
//记录history表中最大id 取出log表中;最小id 写入history表
//删除log表中数据
const (
RESERVEDATA int64 = 1000000
)
//get max id from table fill to struct
func getMaxvalue(si * dbutil.Sqlinfo)error{
err :=si.GetMaxOrMinId("source","id","max")
if err != nil{
//logutil.Logger.Println(err.Error())
return err
}
//get max id from history table
err = si.GetMaxOrMinId("target","id","max")
if err != nil{
//logutil.Logger.Println(err.Error())
return err
}
return nil
}
//migrate log table data to history
//left 100w data in log
func migrateDate(si *dbutil.Sqlinfo){
if distance := si.SourceMaxid - si.TargetMaxid;distance <