设计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