docs: 点赞标签文档设计
This commit is contained in:
parent
17c68c9233
commit
5b6951eef2
4
.gitignore
vendored
4
.gitignore
vendored
@ -23,5 +23,5 @@ node_modules
|
||||
package-lock.json
|
||||
# Added by code-review-graph
|
||||
.code-review-graph/
|
||||
|
||||
.claude
|
||||
.claude/
|
||||
hookify.*.local.md
|
||||
@ -108,13 +108,14 @@
|
||||
// pkg/service/social_service.go
|
||||
|
||||
func (s *SocialService) GetMyLikedAssets(ctx context.Context, req *pbSocial.GetMyLikedAssetsRequest) (*pbSocial.GetMyLikedAssetsResponse, error) {
|
||||
// 1. 获取用户点赞作品列表
|
||||
// 1. 获取用户点赞作品列表(JOIN exhibition 获取 start_time,避免 N+1)
|
||||
items, total, hasMore := s.getLikedAssetsList(ctx, userID, page, pageSize)
|
||||
assetIDs := extractAssetIDs(items)
|
||||
|
||||
// 2. 批量获取用户点赞时间
|
||||
likedAtMap := s.batchGetUserLikedAtMap(ctx, userID, assetIDs)
|
||||
|
||||
// 3. 批量获取作品排名
|
||||
// 3. 批量获取作品排名(排名数据变化不频繁,可加缓存)
|
||||
rankMap := s.batchGetAssetRanks(ctx, assetIDs)
|
||||
|
||||
// 4. 批量获取过去1小时新增点赞
|
||||
@ -132,42 +133,51 @@ func (s *SocialService) GetMyLikedAssets(ctx context.Context, req *pbSocial.GetM
|
||||
}
|
||||
```
|
||||
|
||||
**性能优化说明:**
|
||||
|
||||
| 优化项 | 优化前 | 优化后 | 收益 |
|
||||
|--------|--------|--------|------|
|
||||
| exhibition 查询 | 循环内逐条查询(N 次) | JOIN 一次获取 | 30 次查询 → 1 次 |
|
||||
| 排名查询 | - | 批量 IN 查询 | 1 次 |
|
||||
| 小时级新增点赞 | - | 批量聚合查询 | 1 次 |
|
||||
|
||||
**关键索引建议:**
|
||||
- `likes.asset_id + likes.created_at`(联合索引,时间窗口聚合)
|
||||
- `likes.asset_id + likes.created_at + user_id`(用户点赞后新增统计)
|
||||
- `exhibitions.asset_id + exhibitions.deleted_at`(JOIN 优化)
|
||||
|
||||
### 4.3 status_text 计算函数
|
||||
|
||||
```go
|
||||
func computeStatusText(item *LikedAssetItem) string {
|
||||
// T0: 眼光拉满 - 用户点赞后新增点赞≥50 且仍在展出
|
||||
// T0: 眼光拉满
|
||||
if item.UserLikedCountAfter >= 50 && !item.IsExpired {
|
||||
return "眼光拉满"
|
||||
}
|
||||
|
||||
// T1: 排名型
|
||||
if item.Rank >= 1 && item.Rank <= 5 {
|
||||
switch {
|
||||
case item.Rank >= 1 && item.Rank <= 5:
|
||||
return fmt.Sprintf("屠榜顶流Top%d", item.Rank)
|
||||
}
|
||||
if item.Rank > 5 && item.Rank <= 10 {
|
||||
case item.Rank > 5 && item.Rank <= 10:
|
||||
return fmt.Sprintf("第%d爆款", item.Rank)
|
||||
}
|
||||
if item.Rank == 20 || item.Rank == 50 || item.Rank == 100 || item.Rank == 200 {
|
||||
case item.Rank == 20 || item.Rank == 50 || item.Rank == 100 || item.Rank == 200:
|
||||
return fmt.Sprintf("排名破%d", item.Rank)
|
||||
}
|
||||
|
||||
// T3/T4: 状态型
|
||||
if item.HourlyNewLikes >= 20 {
|
||||
switch {
|
||||
case item.HourlyNewLikes >= 20:
|
||||
return "火速破圈"
|
||||
}
|
||||
if item.HourlyNewLikes >= 10 {
|
||||
case item.HourlyNewLikes >= 10:
|
||||
return "小爆出圈"
|
||||
}
|
||||
if item.HourlyNewLikes >= 5 {
|
||||
case item.HourlyNewLikes >= 5:
|
||||
return "热度积累"
|
||||
}
|
||||
if item.HourlyNewLikes >= 0 {
|
||||
case item.HourlyNewLikes >= 0:
|
||||
return "缓慢涨粉"
|
||||
}
|
||||
|
||||
// 默认
|
||||
default:
|
||||
return "潜力待挖"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@ -273,7 +283,50 @@ if (res.data && res.data.items) {
|
||||
|
||||
---
|
||||
|
||||
## 8. 附录
|
||||
## 8. 高并发性能评估
|
||||
|
||||
### 7.1 单请求成本
|
||||
|
||||
| 查询操作 | 次数 | 说明 |
|
||||
|----------|------|------|
|
||||
| 点赞列表 + exhibition JOIN | 1 | 批量获取 30 条 |
|
||||
| 批量获取排名 | 1 | IN 查询 30 条 |
|
||||
| 批量获取小时级新增 | 1 | IN + 时间聚合 |
|
||||
| 批量获取点赞后新增 | 1 | IN + 时间聚合 |
|
||||
| **总计** | **4 次** | |
|
||||
|
||||
`computeStatusText` 计算复杂度为 O(1),耗时 < 1μs,可忽略。
|
||||
|
||||
### 7.2 并发容量估算
|
||||
|
||||
假设:单请求 DB 耗时 20ms,DB 连接池 500
|
||||
|
||||
```
|
||||
单个连接处理能力:1000ms / 20ms = 50,000 请求/秒/连接
|
||||
500 连接 × 50 = 25,000 理论上限 QPS
|
||||
|
||||
10,000 并发用户 → 约 3,000-5,000 实际 QPS
|
||||
```
|
||||
|
||||
### 7.3 必要配置
|
||||
|
||||
| 配置项 | 推荐值 | 说明 |
|
||||
|--------|--------|------|
|
||||
| DB 连接池 | 300-500 | 根据 DB 服务器规格调整 |
|
||||
| 排名缓存 TTL | 60s | 排名数据变化不频繁 |
|
||||
| 索引 | 必建 | 参见 4.2 节索引建议 |
|
||||
|
||||
### 7.4 风险点
|
||||
|
||||
| 风险 | 缓解方案 |
|
||||
|------|----------|
|
||||
| 点赞时频繁触发查询 | 点赞后可异步计算 status_text,不阻塞主流程 |
|
||||
| DB 连接池耗尽 | 限流 + 连接池监控 |
|
||||
| 慢查询 | 确保索引生效,定期 EXPLAIN 分析 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 附录
|
||||
|
||||
### 8.1 标签文案汇总
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user