三条链路读写模式对比
GetTagList, GetPicByTag, Search three pipeline comparison
GetTagList
SELECT DISTINCT tag
扫几十万行 → 去重聚合
瓶颈:聚合成本 × 调用频率
高频 · 读多 · 需要物化/缓存
GetPicByTag
tag='A' INTERSECT tag='B'
两子查询 → 内存取交集
瓶颈:多标签 AND 交集
3 标签 → 2s 超时 · 需要倒排索引
Search
5 维字段全文检索
描述 + OCR + 标签 + 地点 + 人物
瓶颈:多维检索
一库搞不定 · 需要多索引并行
结论:三条链路需要三种不同的存储/索引结构,不存在“一个方案打天下”
→ 物化视图 / 缓存
预聚合用户标签列表
避免实时 DISTINCT
→ 倒排索引
tag → [photo_id] 映射
多列表求交集
→ 多模态索引并行
倒排 + 向量 + 时空
多路召回 → 融合排序
数据规模参考:千万~亿级 DAU × 人均万张照片 = 万亿级元数据行
GetTagList:亿级聚合 QPS
GetPicByTag:千亿级倒排列表
Search:5 维 × 3 套索引