V2EX 主题和评论按更新时间实时排序是怎么做到的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
markme
V2EX    数据库

V2EX 主题和评论按更新时间实时排序是怎么做到的

  •  
  •   markme 2016-07-23 13:34:24 +08:00 2618 次点击
    这是一个创建于 3377 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学习数据库,然后模仿做了写了两张表,一章主题表 Topic , 一章主题评论表 Comment , Comment 有一个外键 topic_id 指向主题。

    然后我看 V2EX 主题的排序是同时按主题和评论交替排序的,我试了很多遍都没有成功。

    大家知道怎么实现吗,强迫症,做不出来揪心 TAT

    17 条回复    2016-07-24 01:06:35 +08:00
    mathgl
        1
    mathgl  
       2016-07-23 13:38:29 +08:00
    记得 livid 提过,用 redis 做的。
    markme
        2
    markme  
    OP
       2016-07-23 13:42:19 +08:00
    @mathgl 就是 SQL 的 JOIN 加排序做不出这样的效果? Redis 加权重应该可以的
    jason19659
        3
    jason19659  
       2016-07-23 13:59:44 +08:00
    加个字段..latestDate..
    markme
        4
    markme  
    OP
       2016-07-23 14:12:26 +08:00
    @jason19659 都有,按时间排序做不到这个效果。
    mornlight
        5
    mornlight  
       2016-07-23 14:14:01 +08:00
    每个主题有一个最后更新时间,这不是最直接的思路吗
    9hills
        6
    9hills  
       2016-07-23 14:19:10 +08:00
    SQL 为啥不能实现。。。最简单方法主题加个字段 LatestUpdate ,任何对主题的修改以及新的回复都修改这个字段不就好了...
    markme
        7
    markme  
    OP
       2016-07-23 14:23:39 +08:00
    @9hills @mornlight @jason19659 嗯,谢谢各位,我懂了,这样是可以的。(我想多了,我奔着 Join 查询去想的。)
    binota
        8
    binota  
       2016-07-23 17:45:42 +08:00
    两张表, Threads_Basic 、 Threads_Posts ,
    Threads_Basic 只存主题的标题、发帖人、发帖时间
    Threads_Posts 存包含主帖在内的帖子内容、发帖人、发帖时间、对应的主帖 ID
    这样只要按发帖时间选择 Threads_Posts 再 Join Threads_Basic 就可以了
    cloverstd
        9
    cloverstd  
       2016-07-23 19:14:55 +08:00
    markme
        10
    markme  
    OP
       2016-07-23 19:26:48 +08:00
    @cloverstd 厉害,原来有这个
    ilikekindle
        11
    ilikekindle  
       2016-07-23 22:00:50 +08:00
    v2 的主题不单是靠时间排序吧?
    markme
        12
    markme  
    OP
       2016-07-23 23:12:16 +08:00
    @ilikekindle 嗯,上面讨论的这些完全可以实现这个效果。但是要考虑性能的话,就有些吃紧了。
    实际的话应该是类似 Redis 缓存加按权重排序来实现的。也可能是其他更好的方式。
    julyclyde
        13
    julyclyde  
       2016-07-23 23:54:51 +08:00
    实际上其实并不是按这个排的,没实时
    markme
        14
    markme  
    OP
       2016-07-24 00:39:57 +08:00
    @julyclyde 那就说明是有缓存或者队列存在的,有一个同步的时钟存在。
    dangyuluo
        15
    dangyuluo  
       2016-07-24 00:49:22 +08:00
    redis 排序
    lianghudou
        16
    lianghudou  
       2016-07-24 00:58:05 +08:00
    楼上一群菜鸟,把简单的功能说的神乎其神,其实就是一个 topic 表有两个最后回复时间的字段,一个是真的最后回复时间,一个是假的最后回复时间,假设这个假的最后回复时间名叫 lasttime_fake 。

    其实就是在这个假的 lasttime_fake 上做文章,逼格越高的帖子,这个 lasttime_fake 越接近真实时间,逼格很低的帖子,可能发完以后 lasttime_fake 就是 1 天前。这样就导致了一个很和谐的后果:在 V2EX 上很难见到逼格低的帖子。

    至于这逼格怎么判断的呢?可以 100%的肯定,这不全是靠算法,里面有人工的成分。
    markme
        17
    markme  
    OP
       2016-07-24 01:06:35 +08:00
    @lianghudou 嗯呐,谢谢,这也是一种。 V2EX 的管理员确实挺多的呢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5397 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 07:41 PVG 15:41 LAX 00:41 JFK 03:41
    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