【问题标题】:How to get most popular post?如何获得最受欢迎的帖子?
【发布时间】:2012-05-08 21:33:16
【问题描述】:

我正在创建一个应用程序,用户可以在其中发布帖子,其他用户可以喜欢和评论这些帖子。为了实现这个功能,我使用了 POSTS、LIKES、COMMENTS 等表。(我使用 parse.com 数据库来存储这些表)。

POSTS 具有 postId、content、userWhoMadeThePost、dateOfPosting 等字段

LIKES 包含 filelds 作为 id、postOnWhichLikeWasMade(POSTS(postId) 的外键)、userWhoLiked、dateofLike

COMMENTS 有 id, content, postOnWhichCommentWasMade(POSTS(postId) 的外键), userWhoCommented, dateOfComment

我想检索最受欢迎的帖子(点赞数和 cmets 数最多的帖子)。

  1. 第一种方法是每次请求热门帖子时计算每个帖子的帖子数量和点赞数,但如果出现以下情况,这可能会变得非常耗时 有数百万个帖子。
  2. 另一种方法是在 POSTS 表中包含“noOfLikes”和“noOfComments”,因此为了获得热门帖子,我只能访问 post 表,但这种方法的问题是每当用户对帖子发表评论,然后我将不得不在 POSTS 表中增加“noOfComments”,并在 COMMENTS 表中创建一个条目,当对 POST 表成功进行增量并且在对 COMMENTS 表进行更改之前连接丢失时,问题就开始了.在这种情况下,POST 和 COMMENTS 表将显示错误的数据。

如何做到这一点?

【问题讨论】:

    标签: android database


    【解决方案1】:

    如果您可以控制数据库,这很简单,但是使用 Parse 执行此操作意味着您有两个主要问题(其中一个您已经提到过):

    1. 据我所知,Parse 不允许在查询中进行分组。这意味着(使用您的架构)实际上不可能在不检索全部的情况下获得最喜欢/评论最多的帖子。这是因为您实际上无法像在标准 SQL 查询(使用 JOIN 和 GROUP BY)中那样动态地添加包含喜欢/cmets 数量的新列。
    2. 您不能在一个事务中更新多个对象,因此用户可能会添加评论但帖子对象中的 cmets 数量不会改变。

    话虽如此,我认为(至少如果您坚持使用解析)您必须将“noOfLikes”和“noOfComments”列添加到 Post 对象。它不仅为检索 N 个热门帖子(而不是全部)提供了唯一可行的解​​决方案,而且在我看来,不一致的实际风险非常低。您始终可以捕获网络(或其他)异常,并将更新请求暂时存储在本地并稍后重试。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      相关资源
      最近更新 更多