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
按天更新