markme
V2EX  ›  数据库

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

  •  
  •   markme · Jul 23, 2016 · 3578 views
    This topic created in 3758 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    至于这逼格怎么判断的呢?可以 100%的肯定,这不全是靠算法,里面有人工的成分。
    markme
    markme
    OP
    Jul 24, 2016
    17
    @lianghudou 嗯呐,谢谢,这也是一种。 V2EX 的管理员确实挺多的呢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4809 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 05:53 · PVG 13:53 · LAX 21:53 · JFK 00:53
    ♥ Do have faith in what you're doing.