想在应用中实现一个朋友网类似的搜索引擎,(很多社交类应用都有这样的搜索设计)
对于这种给定字段的数据检索,目前用户量不大的时候就直接用SQL 语句实现了。
(left join 多个表,where 条件 很丰富)。
但是目前用户搜索量越来越多,用sql 直接查数据 扛不住了,想用sphinx 来代替 setFilter
* 用户信息表总共又4个表,账户信息,用户基本资料,用户地理位置信息,用户设置信息。每个表都有userid
目前的设计方案:
1: sphinx对要过滤的字段做索引,
2: 新注册的用户通过定时增量索引更新sphinx的主索引
3: 对于用户修改了自己的资料的,采取 根据 updatetime 字段(所有用户表都有这样的字段) ,
通过定时任务 调用shpinx的upateAttributes来更新索引。
4:对于用户信息修改了 我也想通过mysql的UDF trigger 异步更新数据。(不知道哪种比较好??!?!)。
5: spinx取到的只是userid,
想把所有的要输出到客户端用户信息保存到Redis
键值对如:userinfo#$userid => {"name":"dashu","age":"38"}
得到userid之后,再通过redis 的 multiGet 获取用户信息。
对于redis里面的用户数据更新的问题 也是采用 定时 根据mysql的updatetime字段来更新,或者UDF trigger 异步更新(哪个好呢?? why)。
有没有大虾有更好的设计方案,拿出来分享一下。