代码之家  ›  专栏  ›  技术社区  ›  Nick Retallack monkut

寻找最活跃的话题或游戏

  •  1
  • Nick Retallack monkut  · 技术社区  · 17 年前

    在数据库中找到最活跃的论坛线程或游戏的一个好指标是什么?

    想象一下你开了一个像4chan这样的论坛。您希望最活跃的线程出现在第一页。您尝试按上次更新的内容对主题进行排序,但结果很混乱:每次刷新时看到的线程实际上是随机的,跳到第二页可能会显示许多相同的结果。必须有一个更稳定的算法来确定活动线程!

    想象一下你开了一个网站,人们可以在那里玩和看游戏。你想让人们看到这些游戏是多么令人兴奋的一刻,他们访问你的头版。游戏中的交互可以归结为生成单个事件。但你不能只按上次更新的内容排序,因为有些人玩得很慢,你想找到令人兴奋的游戏。

    为了获得额外的好处,请考虑如何为最大活动构建一个SQL查询,或者如何在服务器端缓存中实现这一点。最佳答案不需要cron作业来整理数据。

    5 回复  |  直到 17 年前
        1
  •  1
  •   ErsatzRyan    17 年前

    在论坛示例中,最热门的帖子是基于发布的评论,因此您只需计算当前日/周/月发布的评论数(无论您决定的时间框架是什么,都构成“热门”),然后基于此对帖子进行排序。

    SELECT p.id, p.title, COUNT(c.created_at) as count
    FROM posts p, comments c
    WHERE p.id = c.post_id
    AND c.created_at > ***TIME YOU DETERMINE AS HOT***
    GROUP BY p.id, p.title
    ORDER BY count DESC
    

    假设您对这些数据模型有相似的表设置,那么您的游戏场景将是相同的

    **注意,您在select中放入的任何内容都必须在group by语句中**

        2
  •  0
  •   prime23 hans    17 年前

    当然,您不能指望上次更新(它自己),您应该使用回复计数/播放计数,查看计数/播放计数的所有时间活动线程。你可能需要为每个游戏添加一个像now_playing_count这样的字段来确定最热门的游戏。

        3
  •  0
  •   Hao Wooi Lim    17 年前

    一个与你的问题有点关系的问题叫做 The Britney Spears Problem 这是关于在算法上确定热门话题的困难。从人工智能的角度来看,这是一个难题,因为首先,没有固定数量的主题,所以分类是不可能的。而且由于趋势会不时变化,模型需要考虑时间因素(典型的神经网络不会,除非你在讨论时滞神经网络)。最后,热门的和不热门的都是主观的,而且因人而异,这意味着你可能需要考虑到某人过去的利益( Collaborative Filtering ).

        4
  •  0
  •   Omar Kooheji    17 年前

    Psuedo代码:

    选择id,按主题分组计数,按计数排序日期

        5
  •  -1
  •   Quassnoi    17 年前

    你试过按 last_updated ,但结果是混乱的:每次刷新时看到的线程实际上是随机的,跳到第二页可能会显示许多相同的结果。

    您可以记住用户单击第一页的确切时间,并按 上次更新时间 小于或等于该日期:

    SELECT  t.id, t.name, p.last_updated
    FROM    threads t
    JOIN    posts p
    ON      p.thread_id = t.id
            AND p.last_updated <= @last_updated
    ORDER BY
            p.last_updated DESC
    

    这会给你一个稳定的结果集。

    仅当用户刷新首页时更新变量(而不是单击 page 1 , page 2 等)