perf: 优化租户OSS总计存储逻辑
This commit is contained in:
@@ -19,34 +19,20 @@ type tenantOssTotal struct{}
|
|||||||
// SaveOrUpdate 增加或更新
|
// SaveOrUpdate 增加或更新
|
||||||
func (d *tenantOssTotal) SaveOrUpdate(ctx context.Context, updateData []*dto.UpdateUsedOssReq) (err error) {
|
func (d *tenantOssTotal) SaveOrUpdate(ctx context.Context, updateData []*dto.UpdateUsedOssReq) (err error) {
|
||||||
if !g.IsEmpty(updateData) {
|
if !g.IsEmpty(updateData) {
|
||||||
|
data := make([]gdb.Map, 0, len(updateData))
|
||||||
for _, v := range updateData {
|
for _, v := range updateData {
|
||||||
model := gfdb.DB(ctx).Model(ctx, consts.TenantOssTotalCollection).Where(gdb.Map{"tenant_id": v.TenantId})
|
data = append(data, gdb.Map{
|
||||||
// 检查是否存在
|
entity.TenantOssCol.Bid: guid.S(),
|
||||||
count, err := model.Count()
|
entity.TenantOssCol.TenantId: v.TenantId,
|
||||||
if err != nil {
|
entity.TenantOssCol.UsedOssSize: v.UsedOssSize,
|
||||||
return err
|
entity.TenantOssCol.TotalOssSize: v.TotalOssSize,
|
||||||
}
|
entity.TenantOssCol.Creator: v.Updater,
|
||||||
if count > 0 {
|
entity.TenantOssCol.Updater: v.Updater,
|
||||||
// 更新
|
})
|
||||||
_, err = model.Data(gdb.Map{
|
}
|
||||||
"used_oss_size": v.UsedOssSize,
|
_, err = gfdb.DB(ctx).Model(ctx, consts.TenantOssTotalCollection).Data(data).OnConflict(entity.TenantOssCol.TenantId).Save()
|
||||||
"total_oss_size": v.TotalOssSize,
|
if err != nil {
|
||||||
"updater": v.Updater,
|
return err
|
||||||
}).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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|||||||
10
update.sql
10
update.sql
@@ -44,11 +44,10 @@ COMMENT ON COLUMN file.file_size IS '文件大小(字节)';
|
|||||||
|
|
||||||
|
|
||||||
--------------------pgsql创建tenant_oss_total表语句---------------------------
|
--------------------pgsql创建tenant_oss_total表语句---------------------------
|
||||||
|
|
||||||
-- 租户存储服务总计表
|
-- 租户存储服务总计表
|
||||||
CREATE TABLE IF NOT EXISTS 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,
|
bid VARCHAR(64) NOT NULL,
|
||||||
creator VARCHAR(64) NOT NULL,
|
creator VARCHAR(64) NOT NULL,
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
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,
|
used_oss_size INT NOT NULL DEFAULT 0,
|
||||||
total_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)
|
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_used_size ON tenant_oss_total(used_oss_size);
|
||||||
CREATE INDEX idx_tenant_oss_total_total_size ON tenant_oss_total(total_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.updated_at IS '更新时间';
|
||||||
COMMENT ON COLUMN tenant_oss_total.deleter IS '删除人(软删)';
|
COMMENT ON COLUMN tenant_oss_total.deleter IS '删除人(软删)';
|
||||||
COMMENT ON COLUMN tenant_oss_total.deleted_at 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.used_oss_size IS '已使用存储大小(字节)';
|
||||||
COMMENT ON COLUMN tenant_oss_total.total_oss_size IS '总存储大小(字节)';
|
COMMENT ON COLUMN tenant_oss_total.total_oss_size IS '总存储大小(字节)';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user