微信朋友圈只能看到好友点赞这个功能是如何实现的

微信朋友圈只能看到好友点赞这个功能是如何实现的

微信的朋友圈,不像 qq 空间,其只能看到好友的点赞和评论信息

微信是如何实现这个功能的,对于微信来说,用户基数很大,流量很大

如果采用,先获取一个 tweet 下面的所有点赞人的 user_id set A,再根据浏览者的 user_idfriendship 获取所有 friends 的 user_id set B,再把 A 和 B 取交集的话。。。。。。

只能说这种做法看起来就很不行,对 dbQPS 考验太大。

有什么更好的办法吗?

千万别说出让客户端过滤这种想法!


回答:

首先根本就不是关系数据库。

其次现在不太清楚,2015 年以前“只能看到好友的点赞”和“只能看到好友的朋友圈”的实现方式是一样的。你把“点赞”这种数据也理解成与“发了一条朋友圈”类似就好了。

带有“关注”、“订阅”、“好友”这类性质的 Feed 流基本都是同样的方案,无非是有的产品还需要“千人千面”处理回归和排序,而朋友圈这种只按照时间排序就好了。另外就是不同产品之间侧重点稍微有点儿区别,比如微博类的粉丝可能会是海量的、而微信的好友人数是有上限且量很小的,但这个本身不是重点。


回答:

千万别说出让客户端过滤这种想法!

你加一层代码, 把客户端过滤的代码写在服务器那边不就好了?

其余的部分和经典面试题,"设计推特" 差不多吧.
可以看看链接里的方案.
https://vonng.gitbooks.io/ddi...


回答:

1、首先微信的好友功能是不会直接走 db 的,而朋友圈只能看到好友点赞评论功能则的是通过 redis 实现的

2、redis 中可以实现两个集合中求交集的功能,这是现在很多社交软件实现的方法
当用户登录时候,将该用户所有好友存在 redis 中的 collect1 中,再跟朋友圈用户的好友集合 collect2 对比求交集,即可实现

3、大概代码如下:

// 用户登录成功

$collect1 = [1,2,3,4];

$collect2 = [2,4,6,7];

$redis->sadd('collect1', $collect1);

$redis->sadd('collect2', $collect2);

// 获取交集

$result = $redis->sinter('collect1', 'collect2');

print($result);

// 结果如下

[2, 4]


回答:

用常规的关系型数据库做的话,不需要好友关系/点赞数一行一条。。。
毕竟既然这年头join已经被扔出高性能范式了。。。那friendship这种关联表的存在本身就是累赘。。。

idnamefriends
1user12,3,4
2user21,3,4
iduidcontentthumbs
11text3,4
21text3,4

这样就行了。。。

select id,name,friends from user where uid = 

select id,uid,content,thumbs from tweet where uid in (friends)

这个数据你无论如何都是要进后端的,那么还不如在后端去干。。。
thumbs对friends后端过滤一下就行,写个中间件把friends和thumbs拆成array/set/jsonArray whatever。。。

以上是 微信朋友圈只能看到好友点赞这个功能是如何实现的 的全部内容, 来源链接: utcz.com/p/938453.html

回到顶部