pref: 优化批量导入数据库

This commit is contained in:
TsMask
2023-09-23 14:35:12 +08:00
parent 56944ad13d
commit b35ac3e50b
5 changed files with 132 additions and 113 deletions

View File

@@ -1,7 +1,6 @@
package repo
import (
"fmt"
"strconv"
"strings"
@@ -182,66 +181,39 @@ func (r *RepoUdmAuthUser) ClearAndInsert(neID string, authArr []model.UdmAuthUse
}
num += results
}
// // 清空指定ne_id
// _, err := datasource.ExecDB("", "DELETE FROM u_auth_user WHERE ne_id = ?", []any{neID})
// if err != nil {
// log.Errorf("TRUNCATE err => %v", err)
// return num
// }
// for _, u := range authArr {
// u.NeID = neID
// results, err := datasource.DefaultDB().Table("u_auth_user").Insert(u)
// if err != nil {
// return num
// }
// num += results
// }
return num
}
// Insert 新增实体
func (r *RepoUdmAuthUser) Insert(neID string, authUser model.UdmAuthUser) int64 {
authUser.NeID = neID
authUser.Status = "1"
func (r *RepoUdmAuthUser) Insert(authUser model.UdmAuthUser) int64 {
results, err := datasource.DefaultDB().Table("u_auth_user").Insert(authUser)
if err != nil {
log.Errorf("Insert err => %v", err)
return results
}
return results
}
// Insert 批量添加
func (r *RepoUdmAuthUser) Inserts(neID string, authUser model.UdmAuthUser, num string) int64 {
var insertNum int64
imsiVlen := len(authUser.Imsi)
imsiV, err := strconv.Atoi(authUser.Imsi)
if err != nil {
return 0
}
numV, err := strconv.Atoi(num)
if err != nil {
return 0
}
authUser.NeID = neID
authUser.Status = "1"
for i := 0; i < numV; i++ {
imsi := fmt.Sprint(imsiV + i)
if len(imsi) < imsiVlen {
imsi = fmt.Sprintf("%0*s", imsiVlen, imsi)
func (r *RepoUdmAuthUser) Inserts(authUsers []model.UdmAuthUser) int64 {
var num int64
n := len(authUsers)
batchSize := 5000
for i := 0; i < n; i += batchSize {
end := i + batchSize
if end > n {
end = n
}
authUser.Imsi = imsi
results, err := datasource.DefaultDB().Table("u_auth_user").Insert(authUser)
if err == nil {
insertNum += results
}
}
batch := authUsers[i:end]
return insertNum
// 调用 InsertMulti 函数将批量数据插入数据库
results, err := datasource.DefaultDB().Table("u_auth_user").InsertMulti(batch)
if err != nil {
continue
}
num += results
}
return num
}
// Update 修改更新

View File

@@ -213,8 +213,7 @@ func (r *RepoUdmSubUser) ClearAndInsert(neID string, subArr []model.UdmSubUser)
}
// Insert 新增实体
func (r *RepoUdmSubUser) Insert(neID string, subUser model.UdmSubUser) int64 {
subUser.NeID = neID
func (r *RepoUdmSubUser) Insert(subUser model.UdmSubUser) int64 {
results, err := datasource.DefaultDB().Table("u_sub_user").Insert(subUser)
if err != nil {
return results
@@ -223,57 +222,25 @@ func (r *RepoUdmSubUser) Insert(neID string, subUser model.UdmSubUser) int64 {
}
// Insert 批量添加
func (r *RepoUdmSubUser) Inserts(neID string, subUser model.UdmSubUser, num string) int64 {
var insertNum int64
imsiVlen := len(subUser.Imsi)
imsiV, err := strconv.Atoi(subUser.Imsi)
if err != nil {
return 0
}
msisdnVlen := len(subUser.Msisdn)
msisdnV, err := strconv.Atoi(subUser.Msisdn)
if err != nil {
return 0
}
numV, err := strconv.Atoi(num)
if err != nil {
return 0
}
subUser.NeID = neID
for i := 0; i < numV; i++ {
msisdn := fmt.Sprint(msisdnV + i)
if len(msisdn) < msisdnVlen {
msisdn = fmt.Sprintf("%0*s", msisdnVlen, msisdn)
func (r *RepoUdmSubUser) Inserts(subUser []model.UdmSubUser) int64 {
var num int64
n := len(subUser)
batchSize := 5000
for i := 0; i < n; i += batchSize {
end := i + batchSize
if end > n {
end = n
}
subUser.Msisdn = msisdn
batch := subUser[i:end]
imsi := fmt.Sprint(imsiV + i)
if len(imsi) < imsiVlen {
imsi = fmt.Sprintf("%0*s", imsiVlen, imsi)
}
subUser.Imsi = imsi
// IP会自动递增
if subUser.StaticIp != "" {
parts := strings.Split(subUser.StaticIp, ".")
lastPart := parts[3]
lastNum, _ := strconv.Atoi(lastPart)
lastNum += i
newLastPart := strconv.Itoa(lastNum)
parts[3] = newLastPart
newIP := strings.Join(parts, ".")
subUser.StaticIp = newIP
}
results, err := datasource.DefaultDB().Table("u_sub_user").Insert(subUser)
if err == nil {
insertNum += results
// 调用 InsertMulti 函数将批量数据插入数据库
results, err := datasource.DefaultDB().Table("u_sub_user").InsertMulti(batch)
if err != nil {
continue
}
num += results
}
return insertNum
return num
}
// Insert4G 批量添加4G用户