1

我正在创建一个应用程序,用户可以在其中发布帖子,其他用户可以喜欢和评论这些帖子。为了实现这个功能,我使用了 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

我想检索最受欢迎的帖子(没有喜欢和评论的帖子)。

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

这该怎么做?

4

1 回答 1

2

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

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

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

于 2012-04-28T10:33:25.337 回答