Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.5k views
in Technique[技术] by (71.8m points)

群发私信功能怎么制作?

我司的场景:
A关注了B,当B发帖子、评论帖子都要给A发一封相关内容的私信,例如:“B发布了xxxx”,“B评论了xxxx”

方案一:
B每产生一条动态发一封私信。

问题:如果B有100万粉丝,每产生一条动态,就要发100万封私信,这肯定行不通。

方案二
B产生一条动态,将该条动态存入群发信息表(存一条数据),当A打开页面进行浏览时,再从群发信息表拉取B的动态放到私信表里,再从私信表中按时间顺序拉取私信列表。

问题:如果B短时间发了很多条信息,再加上A关注的其他用户C,D,E,D......也发了很多条信息,那么A从群发信息表中单次拉取的数据条数过多,肯定会造成接口响应过慢。

这个功能应该如何制作?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

方案一肯定是不行的
方案二看似可以的,但是题主自己觉得有问题,问题在于A关注的用户太多,所以A拉取的数据多...

但...如果我们随便看看咱们常用社交app的做法,加上针对一次数据过多的常用处理来说,两相结合一想,那方案也就出来了

一次数据过多常用处理,那就是分页嘛,所以首先对于A打开页面进行浏览时,拉取的数据肯定是要分页的。分页就可以保证一次性不会拉取较多的数据了

其次,如果光有分页可能还不行,考虑到社交属性,比如A关注的B,C,D,E,D,但B一天发100条动态,就算分页的话,那A打开页面,翻几次页都是B的动态肯定也是不行啦,所以这个时候肯定就必须要做关注人的动态分组

比如微博APP做法就是,你刷关注人动态时,基本是看到B的两条或三条动态,下面有个折叠按钮:查看该博主其他动态,点击就会再弹出几个该博主的动态,这是一种分组方式

再比如知乎APP,知乎那就很明显啦,知乎分组就在关注人页面的最上方,按照你关注的人显示的最经常访问

如果不分组,应该分页也就够了...不过我之前也是没做过类似需求哈,只是根据自己观察到的提的方案,抛砖引玉,期待做过的大佬再来分享,就酱!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...