
1) 【一句话结论】推荐系统用户画像特征存储采用“关系型数据库(结构化基础信息)+ 内存数据库(Redis,兴趣标签)+ 全文搜索引擎(ES,文本标签)”混合架构,通过索引、缓存、分片等优化,实现用户ID到特征的高效检索。
2) 【原理/概念讲解】老师口吻:用户画像特征需根据数据类型和查询需求选择数据库。
3) 【对比与适用场景】
| 数据库类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 关系型(如MySQL) | 结构化数据存储,支持ACID事务 | 强一致性、事务支持、表结构固定 | 用户基础信息(ID、注册信息、基础属性) | 写操作复杂,不适合高并发查询 |
| Redis | 键值存储,内存数据库 | 高并发读写、低延迟、支持哈希/列表等数据结构 | 用户兴趣标签(实时查询,如推荐时获取标签) | 内存限制,需持久化(RDB/AOF) |
| Elasticsearch | 分布式全文搜索引擎 | 支持全文检索、复杂查询、分词 | 文本型兴趣标签(如“喜欢电影、音乐”的标签,支持全文匹配) | 索引构建耗时,更新延迟 |
4) 【示例】(Redis存储用户兴趣标签)
伪代码:
hset user_tags:123 "电影", "音乐", "游戏"hgetall user_tags:123 返回标签列表(如"电影", "音乐", "游戏")(ES存储文本标签示例):
索引:user_tags_text,字段tags存储文本,分词器用ik_max_word(中文分词),查询:{"query": {"match": {"tags": "电影"}}}
5) 【面试口播版答案】
面试官您好,关于用户画像特征存储和查询优化,核心是混合数据库方案。用户的基础信息(如ID、性别、年龄)存MySQL,因为结构化、事务需求;兴趣标签这类高频查询用Redis(哈希结构),比如用户ID 123的标签是电影、音乐,通过hgetall直接获取,毫秒级响应;文本标签(如“喜欢电影、音乐”)用ES,支持全文检索,比如搜索“电影”标签,提升匹配精准度。查询优化上,Redis对标签字段做哈希索引,ES用中文分词器建立倒排索引,还用Redis缓存热门用户标签减少ES压力。这样通过混合架构,结合索引、缓存,高效支持用户特征快速检索。
6) 【追问清单】
7) 【常见坑/雷区】