类似微信朋友圈功能设计

蓝天bluesky 发布于 2015/08/18 18:59
阅读 2K+
收藏 2
类似微信朋友圈功能,用户可以有很多好友,当用户发布动态后,推送给其他的所有好友,好友可以回复动态,用户有我发布的动态、我参与的动态、好友的动态等列表数据,这些都放在redis和数据库中。现在有个问题,如果用户删除了他的一条动态的话,同时也要删除他的所有好友的圈子中的这条动态,所以要知道这个用户有多少个好友,再从每位好友动态列表中删除这条动态,这种方式有点复杂,而且效率不高,有什么更好的方式么 ?
加载中
0
kl2422
kl2422
有两个方法 一个是你可以改动一下你的表结构,比如有两个表一个是好友表,一个是动态表,你查询的时候先把好友查出来再去查这些好友的动态,这样当用户删除自己的动态的时候,好友动态自然也就没有这条记录了 因为你是关联去查询的,另外一个方法就是按你的表结构的话当用户自己删除动态的时候,你可以异步去删除好友动态,这样至少不会影响你的主程序,如果数据量不是非常大的话速度应该也可以 
蓝天bluesky
蓝天bluesky
考虑新能问题,查询不能通过关联表查询,要先从redis获取动态的ID列表,再查询动态具体信息。
0
kidbei
kidbei

如果用mongo的话这样做:将动态的document中加入一个数组记录与之相关的用户ID,比如A发一条动态,里面的数组有B、C的ID,每个用户查询的时候都只有传入自己的ID即可。要删除就好办了。

用Redis的话就类似于im消息设计中的两种模型:发件箱模型和收件箱模型,前者有你说的删除一条动态要把引用都删除的问题,还有一个就是占空间问题;后者,利用水位设计,具体我也暂时想不出来,不过应该是行得通的,这两种模型都适用。

推荐mongodb,简单,效率高

返回顶部
顶部