请教下 V2EX 的 Block 功能设计思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iyangyuan
V2EX    问与答

请教下 V2EX 的 Block 功能设计思路

  •  
  •   iyangyuan 2018-05-22 11:33:07 +08:00 2699 次点击
    这是一个创建于 2706 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前来看,已经实现屏蔽用户、主题、甚至是评论。

    这个功能看起来简单,实际上大大增加了查询复杂度,直接硬写 SQL 应该不是最佳实践。

    所以想请教一下大家,有没有什么比较好的设计思路?

    PS:这个问题应该是一类问题,好多系统在设计的时候都有可见性的需求,虽然形式不同,但都是这类交集差集的问题。

    8 条回复    2018-05-23 11:25:33 +08:00
    fengyj
        1
    fengyj  
       2018-05-22 11:35:24 +08:00 via Android   1
    v2 以前版本有开源的,就是不知道那个版本有没有 block 功能。
    kera0a
        2
    kera0a  
       2018-05-22 11:48:09 +08:00   1
    做了个简单的验证,
    全部 tab 下首页是 48 条数据,block 一位后,刷新首页变成了 47 条
    所以查询应该是不带 block 条件的

    接下来只是 48 条数据中,排除 block 掉的数据,这一步可以知道是很快的。

    然后应该还有一些措施,防止 Block 数据过多时的额外处理
    iyangyuan
        3
    iyangyuan  
    OP
       2018-05-22 11:53:18 +08:00
    @kera0a Block 数据过多,最容易想到的方法就是用后边的数据补充,但是这样做带来的后果是打乱了分页,必须为每个用户单独维护分页偏移量,否则下一页会看到重复的数据,真是纠结呀~
    kera0a
        4
    kera0a  
       2018-05-22 12:00:06 +08:00
    @iyangyuan
    页码分页就算不排除 block 数据,也得出现重复呀。
    旧数据顶到前面,必然有数据后移。
    据我观察 V2EX 重复就很多
    kera0a
        5
    kera0a  
       2018-05-22 12:02:08 +08:00
    @iyangyuan 如果数据顺序不变,
    翻页维护偏移量 不如简单的根据上一页最后一条数据数据确定下一页第一条数据
    mywaiting
        6
    mywaiting  
       2018-05-22 12:07:43 +08:00   3
    你仔细看看页面的 JS 不就知道了么

    <script type="text/Javascript">
    blocked = [];
    ignored_topics = [];
    $("#TopicsHot").children('.cell').each( function(index) {
    for (i in blocked) {
    if ($(this).hasClass('from_' + blocked[i])) {
    $(this).css('display', 'none');
    }
    }
    for (i in ignored_topics) {
    css_class = 'hot_t_' + ignored_topics[i];
    if ($(this).hasClass(css_class)) {
    $(this).css('display', 'none');
    }
    }
    });
    </script>

    不用想得这么复杂,其实用户根本不关心你分页,眼不见心不烦,帮 TA 隐藏掉就可以了~

    顺便说,v2 这里没有啥黑魔法,代码走的基本都是最简单的套路,够用省事,当然了,也够粗暴
    flowfire
        7
    flowfire  
       2018-05-23 10:35:39 +08:00 via iPhone
    不太懂。。。没有缓存的情况下难道不是直接 NOT 就行了么
    John60676
        8
    John60676  
       2018-05-23 11:25:33 +08:00
    @iyangyuan V 站确实存在重复问题,如果不是特别需求的话,少量的重复还是可以接受的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     978 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:58 PVG 02:58 LAX 11:58 JFK 14:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86