设计linkedIn显示几度关系

这个如果是算法的话,会用BFS。

但如果纯粹用bfs会很慢,因为我们每次要去数据库找好友。

场景是:你搜某某某,在下拉列表那里显示的那些人和你是几度关系。

做合理假设,

  • 假设下拉列表只显示10个用户

  • 我们只显示3度,超过3度的现实3+度。

  • 假设我们每个用户有1k个好友

  • 假设我们用双向bfs,那么从A出发找两度,需要1k X 1k = 1M的数据库查询,从其他人出发,找一度,10k

这个做法因为太多db query所以不行。

那么我们就只能预处理了。另外开一个asyn job在用户加好友的时候更新一下关系表。

只存2度,每次搜的时候,就2次db查询,把1度和2度的拿过来,被搜的人那边也是,然后就找交集,找到就显示度数,找不到就3+度。

另外如果要求出是通过哪些中间人找到好友的,可以在预处理存储的表里存一下通过哪个人到这个点的。

因为这个是非常简单的key value存储,所以放nosql里就ok了。

Last updated