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

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

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

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

SQL语句:

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



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

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

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


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

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

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

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

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

在这里想问问有什么成熟的方案没有 。
...全文
256 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn 2013-08-08
  • 打赏
  • 举报
回复
--下面这样查询300条应该会比较快
select TOP(300) * 
from 用户表 a
INNER join 最近登录的用户 b
	on a.姓名=b.姓名	--姓名创建索引
where a.地区=@area and a.性别=相反的@sex
order by b.最近登陆日期 DESC	--最近登陆日期,创建索引
coFinder 2013-08-08
  • 打赏
  • 举报
回复
引用 3 楼 ap0405140 的回复:
算法整体看没什么大问题,建议: 1.{最近登录的用户} 这个集合每半个小时计算最近登录的1w个用户,然后存为表. 2.查询时应避免使用"select *",尽量仅将需要返回的字段列出来.
取1w用户存表,比存缓存要慢吧,
coFinder 2013-08-08
  • 打赏
  • 举报
回复
引用 3 楼 ap0405140 的回复:
算法整体看没什么大问题,建议: 1.{最近登录的用户} 这个集合每半个小时计算最近登录的1w个用户,然后存为表. 2.查询时应避免使用"select *",尽量仅将需要返回的字段列出来.
select* 倒是没用,这里只是为了描述简介一点
唐诗三百首 2013-08-08
  • 打赏
  • 举报
回复
算法整体看没什么大问题,建议: 1.{最近登录的用户} 这个集合每半个小时计算最近登录的1w个用户,然后存为表. 2.查询时应避免使用"select *",尽量仅将需要返回的字段列出来.
coFinder 2013-08-08
  • 打赏
  • 举报
回复
我自己顶········。
nikolaichow 2013-08-08
  • 打赏
  • 举报
回复
顶贴

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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