三条链路读写模式对比 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 套索引