[英]Efficient way to implement LinkedIn like “How you are connected to” feature?
LinkedIn有这个很酷的功能,在访问某些用户的个人资料时,LinkedIn会提示你如何通过网络连接到该用户。
假设访问者和配置文件所有者是图的两个节点,其中节点表示用户,边表示友谊,一个简单的解决方案可以是从两个节点开始直到某个级别的bfs并查看是否存在任何交叉点。 交叉点将是网络链路节点。
虽然这听起来很整洁,但问题在于,为了确定每个人的朋友,需要单独的数据库查询。 当网络深度超过2级时,算法将是非常耗时的。 有更好的有效替代方案吗? 如果没有,我们如何才能增加更好的硬件支持(并行计算,网格,分布式数据库等)以减少计算所需的时间?
如果没有某种递归存储过程(SQL Server 2005+中的CTE),随着关卡的深入,你需要多次往返。 但是,良好的缓存基础结构可以真正帮助提高性能,因为最热门/活跃用户的连接列表将保持缓存状态。 读/写缓存机制会使事情变得更好(缓存更新级联到db更新,缓存读取级联到db读取)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.