From 8e2ea0bde1ff327086fbaf9e2935268c6a26bf8f Mon Sep 17 00:00:00 2001 From: qhd <1766646056@qq.com> Date: Wed, 18 Mar 2026 14:26:15 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=A7=9F=E6=88=B7OSS?= =?UTF-8?q?=E6=80=BB=E8=AE=A1=E5=AD=98=E5=82=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/tenant_oss_total.go | 40 +++++++++++++--------------------------- update.sql | 10 +++++----- 2 files changed, 18 insertions(+), 32 deletions(-) diff --git a/dao/tenant_oss_total.go b/dao/tenant_oss_total.go index 4025785..14cfaa1 100644 --- a/dao/tenant_oss_total.go +++ b/dao/tenant_oss_total.go @@ -19,34 +19,20 @@ type tenantOssTotal struct{} // SaveOrUpdate 增加或更新 func (d *tenantOssTotal) SaveOrUpdate(ctx context.Context, updateData []*dto.UpdateUsedOssReq) (err error) { if !g.IsEmpty(updateData) { + data := make([]gdb.Map, 0, len(updateData)) for _, v := range updateData { - model := gfdb.DB(ctx).Model(ctx, consts.TenantOssTotalCollection).Where(gdb.Map{"tenant_id": v.TenantId}) - // 检查是否存在 - count, err := model.Count() - if err != nil { - return err - } - if count > 0 { - // 更新 - _, err = model.Data(gdb.Map{ - "used_oss_size": v.UsedOssSize, - "total_oss_size": v.TotalOssSize, - "updater": v.Updater, - }).Update() - } else { - // 插入 - _, err = gfdb.DB(ctx).Model(ctx, consts.TenantOssTotalCollection).Data(gdb.Map{ - "bid": guid.S(), - "tenant_id": v.TenantId, - "used_oss_size": v.UsedOssSize, - "total_oss_size": v.TotalOssSize, - "creator": v.Updater, - "updater": v.Updater, - }).Insert() - } - if err != nil { - return err - } + data = append(data, gdb.Map{ + entity.TenantOssCol.Bid: guid.S(), + entity.TenantOssCol.TenantId: v.TenantId, + entity.TenantOssCol.UsedOssSize: v.UsedOssSize, + entity.TenantOssCol.TotalOssSize: v.TotalOssSize, + entity.TenantOssCol.Creator: v.Updater, + entity.TenantOssCol.Updater: v.Updater, + }) + } + _, err = gfdb.DB(ctx).Model(ctx, consts.TenantOssTotalCollection).Data(data).OnConflict(entity.TenantOssCol.TenantId).Save() + if err != nil { + return err } } return diff --git a/update.sql b/update.sql index eb90bc4..3eec72e 100644 --- a/update.sql +++ b/update.sql @@ -44,11 +44,10 @@ COMMENT ON COLUMN file.file_size IS '文件大小(字节)'; --------------------pgsql创建tenant_oss_total表语句--------------------------- - -- 租户存储服务总计表 CREATE TABLE IF NOT EXISTS tenant_oss_total ( -- 基础字段 - id BIGSERIAL PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, -- 保留id作为主键 bid VARCHAR(64) NOT NULL, creator VARCHAR(64) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, @@ -62,9 +61,10 @@ CREATE TABLE IF NOT EXISTS tenant_oss_total ( used_oss_size INT NOT NULL DEFAULT 0, total_oss_size INT NOT NULL DEFAULT 0, - -- 唯一索引 & 普通索引 + -- 唯一索引(仅约束tenant_id唯一性,不替代主键) CONSTRAINT uk_tenant_oss_total_tenant_id UNIQUE (tenant_id) -); + ); + -- 为租户存储表添加索引 CREATE INDEX idx_tenant_oss_total_used_size ON tenant_oss_total(used_oss_size); CREATE INDEX idx_tenant_oss_total_total_size ON tenant_oss_total(total_oss_size); @@ -79,7 +79,7 @@ COMMENT ON COLUMN tenant_oss_total.updater IS '更新人'; COMMENT ON COLUMN tenant_oss_total.updated_at IS '更新时间'; COMMENT ON COLUMN tenant_oss_total.deleter IS '删除人(软删)'; COMMENT ON COLUMN tenant_oss_total.deleted_at IS '删除时间(软删)'; -COMMENT ON COLUMN tenant_oss_total.tenant_id IS '租户ID'; +COMMENT ON COLUMN tenant_oss_total.tenant_id IS '租户ID(唯一)'; COMMENT ON COLUMN tenant_oss_total.used_oss_size IS '已使用存储大小(字节)'; COMMENT ON COLUMN tenant_oss_total.total_oss_size IS '总存储大小(字节)';