feed 推拉两种模式各有什么缺点?

2015-05-31 12:16:36 +08:00
 cevincheung

像现在发现的拉(PULL)虽然在简单的关注条件中有比较好的速度,但是无法处理一些个性化处理。比如微信朋友圈的指定好友可见或不可见如果用拉模式,基本上无法实现。

select f.*,u.nickname,u.avatar from feed f left join user u on f.user_id=u.user_id where  f.user_id in (select user_id from user_relation where from_user_id = :user_id ) order by id desc

推(PUSH)抛开冗余数据不谈,倒是可以方便快速的实现个性化的权限设置,但是有个问题没想到怎么处理,就是关注一个“老”用户,对方以前的feed怎么快速的也推到推送表中?.

select f.*,u.username,u.avatar from feed f left join user u on f.user_id=u.user_id where f.feed_id in (select feed_id from user_feed where user_id = :user_id)

还有其他什么缺点请指出。

1965 次点击
所在节点    问与答
9 条回复
yangqi
2015-05-31 12:28:48 +08:00
指定可见或不可见为啥在拉模式无法实现?
cevincheung
2015-05-31 12:38:44 +08:00
@yangqi

如何?
比如像微信朋友圈里的,发布的时候可以指定某些人可见,某些人不可见,可以覆盖或继承在好友权限里的设置(可以设置禁止某些人看我的朋友圈内容)

在拉模式如何取(前提是最简单的SQL没有复杂查询哦~~因为复杂,那就不如推了)?
酱紫?:
```sql
select f.*,u.nickname,u.avatar from feed f left join user u on f.user_id=u.user_id where f.user_id in (select user_id from user_relation where from_user_id = :user_id )

and find_in_set(:user_id,xxxxx)
and !find_in_set(:user_id,xxxxx)

order by id desc
```

新的问题:用户已经发布过的feed,然后个人中心设置禁止指定用户ID查看我的feed。那怎么覆盖之前的设置?
9hills
2015-05-31 14:50:17 +08:00
@cevincheung 客户端实现。

就是其实客户端是拉了所有的内容,只是展现的时候根据屏蔽表进行单向和双向屏蔽。
varrily
2015-05-31 15:03:54 +08:00
@9hills 客户端实现安全么?会不会被绕过。
cevincheung
2015-05-31 15:06:07 +08:00
@varrily 这就由牵扯到接口权限鉴权方法了。
varrily
2015-05-31 15:06:13 +08:00
pull模式in查询效率不高,尤其关注量大的时候。
push模式,老数据是个问题,其次粉丝量大的时候,修改删除都需要同步。
yangqi
2015-05-31 22:27:21 +08:00
@cevincheung

发布的时候指定的很简单啊,在查询中排除掉那几个用户就行了
权利里设置好的,要看你是怎么存储在表里的,要pull也没什么难度啊
cevincheung
2015-05-31 22:29:21 +08:00
@yangqi
so~ 表要如何设计?在不考虑redis等辅助方案下。
yangqi
2015-05-31 22:34:12 +08:00
@cevincheung 你现在的就可以,不知道你user_relation是怎么设计的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/195053

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX