【工作日常】推荐策略V3

发布时间 2023-03-23 20:05:15作者: rongbu2

功能逻辑设计:

分池:
  1. 全表用户分池:SSS、SS、S、A...(目前的需求只需要构建3个用户池)
  2. 新建对应的表结构作为用户池数据存储持久层,表结构基本和dating_user保持一致
  3. XXL 定时任务,处理全表用户...注意数量进行钉钉告警,以及异常进行钉钉告警
  4. SSSFilterCondition,SSFilterCondition,SFilterCondition,AFilterCondition
召回:
  1. 常量处理:RecallNum 召回总人数 100 ,SSSUserPoolRecallNum,SSUserPoolRecallNum
  2. 分池筛选后进行洗牌后从头开始取指定数量的数据。

代码逻辑设计:

分池:

新增3个定时任务,分别每晚00:00:10、00:00:15、00:00:30 同步 SSS、SS、S用户池数据(删除当前天的数据后进行新增数据,不会处理原始数据/当数据量到达一定地步,可以清理一定时间之前的数据)
● 构建查询条件,使用相应查询条件 分页查询全表用户池数据,目前按一页500处理(分页查询的数量控制限制避免了 一次性需要插入大量数据,同时也进行防止出错后可以按批次重新进行插入操作)
● 将查询的SSS用户池数据进行插入SSS用户池数据表
● 插入失败的情况的异常处理机制以及重试机制(重试次数设置)
● 重复数据的检查,并进行处理(数据库层面/代码逻辑层面)

筛选:

● 查询 SSS 用户池数据
● 如果 SSS 获取的数据 大于 需要的数量,那么随机并截取到需要的数量的大小,添加到 数据list
● 查询 SS 用户池数据
● 如果获取的SS用户池数据大于需要的数量,那么随机并截取到需要的数量的大小,添加到 数据list
● 判断是否查询完毕,如果 SSS 用户池数据和 SS 用户池数据都不足 需要召回的总人数,则去 S 用户池进行查询数据,并且随机并截取到需要的数量的大小,添加到 数据list
● 判断 数据list大小是否等于 召回总人数,小于则 设置数据无下一页,等于则 设置数据有下一页
● 如果 用户设置了需要看到其他交友目的,则优先将用户筛选的交友目的 放到前面 按打开app时间倒序,然后将非用户筛选的交友目的 放到后面 按打开app时间倒序。具体如下:
○ 将 数据list 按交友目的分组
○ 遍历 筛选的交友目的,依次获取对应的 list分组 并 添加到 新的 tmp list
○ 如果 tmp list 为空,则直接 排序后 返回 数据 list
○ 如果 tmp list 不为空,则进行排序后 添加到 new数据list
○ 数据list 移除tmplist后,进行排序后 添加到 new数据list
○ 返回 new数据list