社交平台好友推荐系统设计(类似搜索引擎排名 求指导)

coFinder 2013-08-07 02:39:37
我现在想为社区添加一个功能,就是好友推荐系统

根据某个用户的地区和性别 等自己的属性推荐特定的好友

我以前的做法是
比如登录用户为‘张三’男的 我要推荐相同地区的女的。

SQL语句:

select 地区 into @area,性别 into @sex from 用户表 where 姓名='张三'
select * from 用户表 where 地区=@area and 性别=相反@sex and 姓名 in(最近登录1w用户) limit 300



{最近登录的用户}
这个集合我每半个小时计算的最近登录的1w个用户,然后放到缓存。(这样做虽然不合适,但是如果将用户登录表和用户表join,速度很慢,)

如下。是我以前的做法,发现排序很慢

select * from 用户表 left join 登录表 on 用户表.姓名=登录表.姓名 where 地区=@area and 性别=相反的@sex order by 最近登陆日期 DESC limit 300;


得到的结果集合
还需要计算张三和她们之间的年龄差距计算排序( 根据权重排序 )

如 张三 和 王晓燕 的年龄差距为 1岁,权重为 50。

--------------分割线-----------------------------------------------------

我以前这样做每次一个用户发起请求都要执行SQL 和计算,觉得不太合适,所有该有的索引都有了。

我想用sphinx,但是我这个推荐本书就是依据字段属性来区分的,所以觉得也有点不合适,

在这里想问问有什么成熟的方案没有 。
...全文
217 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2013-08-08
  • 打赏
  • 举报
回复
这种推荐复杂有复杂的做法 简单有简单的做法 能满足目前的需求就可
唐诗三百首 2013-08-08
  • 打赏
  • 举报
回复
算法整体看没什么大问题,建议: 1.{最近登录的用户} 这个集合每半个小时计算最近登录的1w个用户,然后存为表. 2.查询时应避免使用"select *",尽量仅将需要返回的字段列出来.

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧