perf: 优化租户OSS总计存储逻辑
This commit is contained in:
@@ -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
|
||||
|
||||
10
update.sql
10
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 '总存储大小(字节)';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user