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

2016-07-23 13:34:24 +08:00
 markme

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

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

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

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

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

至于这逼格怎么判断的呢?可以 100%的肯定,这不全是靠算法,里面有人工的成分。
markme
2016-07-24 01:06:35 +08:00
@lianghudou 嗯呐,谢谢,这也是一种。 V2EX 的管理员确实挺多的呢。

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

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

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

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

© 2021 V2EX