0.代码版本
该专栏的博客当中涉及的所有代码,均为组队学习期间的版本,大概在2021年12月12日左右,某一个可能的参考版本链接如下:
https://github.com/datawhalechina/fun-rec/tree/9bcfafaae339c443cc7911b9070bf52adef9e994
1. 相关文件
PS D:\Project\fun-rec\codes\news_recsys\news_rec_server> tree /f /a
卷 Data 的文件夹 PATH 列表
卷序列号为 7876-8A9C
D:.
|
+---controller
| log_controller.py
| 这是MVC架构当中的controller部分,即:
| MySQL内loginfo库中log_Y-m-d表的控制文件
|
| user_action_controller.py
| 这是MVC架构当中的controller部分,即:
| MySQL内userinfo库中register_user表的控制文件
| 也控制user_collections、user_likes、user_read
| 主要是在注册时新增用户,登录时做身份校验
| 以及根据前端传来的用户行为更新对应的数据
| 例如删除用户的喜欢,或者是新增用户的喜欢
|
+---dao
| mongo_server.py
| MVC架构当中MongoDB数据库的Model文件
| 用于和MongoDB数据库进行交互
| 返回与数据库的连接使得数据库被操作
|
| mysql_server.py
| MVC架构当中MySQL数据库的Model文件
| 用于和MySQL数据库进行交互,返回与数据库的连接
|
| README.md
| 项目的说明文件
|
| redis_server.py
| MVC架构当中Redis数据库的Model文件
| 用于和Redis数据库进行交互,返回与数据库的连接
|
\---entity
\--
| logitem.py
| 定义MySQL内loginfo库log_Y-m-d表的结构
| 主要是用来存储用户行为,包括阅读、点赞等
|
| register_user.py
| 定义MySQL内userinfo库register_user表的结构
| 主要是为了存储已经注册的用户的个人信息及账户
|
| user_collections.py
| 定义MySQL内userinfo库user_collections表的结构
| 主要是用来存储用户收藏行为的详细信息
|
| user_exposure.py
| 定义MySQL内userinfo库exposure_Y-m-d表的结构
| 主要是用来存储用户的曝光表,每天存一个版本
| 也就是说,每个表包含截止到当天的所有曝光数据
|
| user_likes.py
| 定义MySQL内userinfo库user_likes表的结构
| 主要是用来存储用户点赞行为的详细信息
|
| user_read.py
| 定义MySQL内userinfo库user_read表的结构
| 主要是用来存储用户阅读行为的详细信息
|----------------------------------------------------------
2. MySQL

我感觉有点神奇,user_likes和user_collections为啥同时存在昵称username和用户编号userid,这两者都是唯一的,不允许重复啊
所以说根据其中一个,就可以确定用户的身份,就像user_read和exposure_Y-m-d,都只用唯一的id标识用户和新闻
而且这个exposure_Y-m-d也挺奇怪,存的是当天的曝光表,注意,是当天的曝光,也就是,每天一个表,从Redis更新过来
我想起来了,物料处理的时候会有一个叫news_to_redis.py的文件,在那里面会清空Redis所有的数据,也就是Redis按天更新
3. MongoDB

这里也挺神奇的,RedisProtrail当中竟然没有新闻的热度值,热度值是在FeatureProtrail当中,随着物料处理按天进行热度更新
这里的RedisProtrail的数据就是流向Redis[1]和Redis[2]的用来展示新闻的数据,包含的静态信息和动态信息
而FeatureProtrail的数据才是被cold_start.py和hot_recall.py处理之后流向Redis[0]用来生成推荐和生成热门的
而且还有一个问题,为什么用户画像当中要包含密码啊?这个属性好像从来没有被用到吧,即便后面升级也不会使用吧
然后就是关于历史行为的统计了,这里设定的是对用户过去15天内的like和collections进行top3新闻类别等的统计,没有阅读量
4. Redis

这里基本都还算正常吧,神奇的是曝光表,这个东西好像是只记录当天的推荐历史,去重的话也只是针对当天的历史去重,可以有昨天的
如同上文所说,物料处理的时候会有一个叫news_to_redis.py的文件,在那里面会清空Redis所有的数据,也就是Redis按天更新
5. 流程图示

该博客详述了一个新闻推荐系统的数据库设计,包括MySQL、MongoDB和Redis的使用。MySQL中包含了用户信息和行为日志,如点赞、收藏和阅读记录。MongoDB用于存储静态信息,而Redis用于缓存热门新闻和用户曝光数据。系统每天更新Redis中的数据,并通过news_to_redis.py脚本清空和刷新。此外,还讨论了用户画像统计和新闻热度计算的问题。
424

被折叠的 条评论
为什么被折叠?



