社交网络中“共同好友有xx个”是怎样计算出来的,尤其是对于像FB, G+ 或者 人人 这种大型SNS网站
如果是 单纯计算 A B 俩人共同好友,好友列表取交集就行了.先说在线的,我估计实际跑的时候是这样的:A B 俩人. 为了存储AB共同好友把俩 ID 放一块,排序作为 key.def update_shared_friends(A, B, v=None): key = sort((A, B)) # 算 key value = https://www.zhihu.com/api/v4/questions/24710399/v or (friend(A) /u0026amp; friend(B)) # 取交集 store_in_db(key, value) # 存储def get_shared_friend(A, B): key = sort((A, B)) # 算 key return get_from_db(key) or (friend(A) \u0026amp; friend(B))A 与 B 成为好友时:先计算 A B 的共同好友列表 LL = get_shared_friend(A, B)update_shared_friend(A, B, L)for p in L: pA = get_shared_friend(p, A) pA.append(B) update_shared_friends(p, A, pA) pB = get_shared_friend(p, B) pB.append(A) update_shared_friends(p, B, pB)A 与 B 解除好友时:先计算 A B 的共同好友列表 LL = get_shared_friend(A, B)for p in L: pA = get_shared_friend(p, A) pA.remove(B) update_shared_friends(p, A, pA) pB = get_shared_friend(p, B) pB.remove(A) update_shared_friends(p, B, pB)加好友删好友这种事情,不会非常频繁,而且共同好友这个东西是可以计算出来的,这部分数据坏了,也可以重新计算出来,只要有好友列表。所以可以考虑全固话存储,也可以考虑搞个KV的东西缓存起来,淘汰策略什么的就看具体情况了,哪种好就用哪种.再说离线的,好友关系肯定也要离线计算拿来挖掘的,这个把数据库dump下来,如果前面是固化存储共同好友,那直接拿来用,如果没有现成的,那就用 map reduce 做类似 join 的操作,把共同好友重新算一遍。比如一种mr的方式:输入:key是id,value是key的好友列表 id1: 2, 3, 4, 52: 3, 4, 53: 4, 5, 64: 1, 35: 6: 3, 4mapper: 对每一个kv对:print "%s, 0\\t%s" % (key, value)for p in value.split(\u0026#39;,\u0026#39;): k1 = k2 = list(k1) k2.sort() if k2 == k1: \tprint "%s, 0\\t%s" % (", ".join(k2), value) else:\tprint "%s, 1\\t%s" % (", ".join(k2), value)输出:1, 2, 0: 2, 3, 4, 51, 3, 0: 2, 3, 4, 51, 4, 0: 2, 3, 4, 51, 5, 0: 2, 3, 4, 52, 3, 0: 3, 4, 52, 4, 0: 3, 4, 52, 5, 0: 3, 4, 53, 4, 0: 4, 5, 63, 5, 0: 4, 5, 63, 6, 0: 4, 5, 61, 4, 1: 1, 33, 4, 1: 1, 33, 6, 1: 3, 44, 6, 1: 3, 5排序后:1, 2, 0: 2, 3, 4, 51, 3, 0: 2, 3, 4, 51, 4, 0: 2, 3, 4, 51, 4, 1: 1, 31, 5, 0: 2, 3, 4, 52, 3, 0: 3, 4, 52, 4, 0: 3, 4, 52, 5, 0: 3, 4, 53, 4, 0: 4, 5, 63, 4, 1: 1, 33, 5, 0: 4, 5, 63, 6, 0: 4, 5, 63, 6, 1: 3, 44, 6, 1: 3, 5reducer 相邻kv对,key的第三位, 0 1 均有,则两个结果取交集,得到共同好友,否则丢弃,代码略:1, 2, 0: 2, 3, 4, 5 # 丢弃1, 3, 0: 2, 3, 4, 5 # 丢弃1, 4, 0: 2, 3, 4, 5 1, 4, 1: 1, 31, 5, 0: 2, 3, 4, 5 # 丢弃2, 3, 0: 3, 4, 5 # 丢弃2, 4, 0: 3, 4, 5 # 丢弃2, 5, 0: 3, 4, 5 # 丢弃3, 4, 0: 4, 5, 63, 4, 1: 1, 33, 5, 0: 4, 5, 6 # 丢弃3, 6, 0: 4, 5, 63, 6, 1: 3, 44, 6, 1: 3, 5 # 丢弃得到:1, 4: 33, 4: 3, 6: 4
推荐阅读
- 郑州警方查获一盘踞境外网络赌博犯罪集团冻结资金逾5亿元
- 『徐州』徐州这群留守儿童的纯净声音抚慰人心 “6秒童声合唱团”走红网络
- 长春评选“网络奋斗者”:互联网成更多普通人创业工具
- 西藏首台5G网络车载移动CT仪器投用
- 诈骗钱财|冒充专家高价兜售“特效药”、谎称卖口罩骗定金……警惕这些网络诈骗
- 媒体聚焦网络知产保护:强化企业社会责任,完善行业监管体系
- 京东的客服+网络安全啥水平
- 网络银行牌照到底可以做啥
- 怎样评价北京信息科技大学网络速度奇慢无比
- 一点科技|2020中国网络安全产业高峰论坛:360斩获工信部三大殊荣
