V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cevincheung
V2EX  ›  问与答

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

  •  
  •   cevincheung · 2015-05-31 12:16:36 +08:00 · 1960 次点击
    这是一个创建于 3274 天前的主题,其中的信息可能已经有所发展或是发生改变。

    像现在发现的拉(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)
    

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

    9 条回复    2015-05-31 22:34:12 +08:00
    yangqi
        1
    yangqi  
       2015-05-31 12:28:48 +08:00
    指定可见或不可见为啥在拉模式无法实现?
    cevincheung
        2
    cevincheung  
    OP
       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
        3
    9hills  
       2015-05-31 14:50:17 +08:00
    @cevincheung 客户端实现。

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

    发布的时候指定的很简单啊,在查询中排除掉那几个用户就行了
    权利里设置好的,要看你是怎么存储在表里的,要pull也没什么难度啊
    cevincheung
        8
    cevincheung  
    OP
       2015-05-31 22:29:21 +08:00
    @yangqi
    so~ 表要如何设计?在不考虑redis等辅助方案下。
    yangqi
        9
    yangqi  
       2015-05-31 22:34:12 +08:00
    @cevincheung 你现在的就可以,不知道你user_relation是怎么设计的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2860 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:25 · PVG 21:25 · LAX 06:25 · JFK 09:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.