2012-04-28 115 views
1

我正在创建一个应用程序,用户可以在其中发布帖子,其他用户可以对这些帖子进行评论。为了实现这个功能,我使用了喜欢POSTS,LIKES,COMMENTS这样的表格(我使用parse.com数据库来存储这些信息表)。如何获得最热门的帖子?

岗位有像帖子ID,内容,userWhoMadeThePost领域,dateOfPosting

喜欢含有filelds为ID,postOnWhichLikeWasMade(外键帖子(帖子ID)),userWhoLiked,dateofLike

评论有ID,内容,postOnWhichCommentWasMade (外键到POSTS(postId)),userWhoCommented,dateOfComment

我想检索最热门的帖子(最喜欢和评论的帖子)。

  1. 这样做第一种方法是计数无后的和每个岗位,每当一个请求是热门职位制成,但本可以成为非常耗时,如果 有数以百万计的帖子的每一次喜欢。
  2. 其他方式做到这一点是在POSTS表中包含'noOfLikes'和'noOfComments',所以为了获得热门的帖子,我只能访问帖子表,但这种方法的问题是每当用户对一篇文章发表评论,然后我将不得不在POSTS表中增加'noOfComments',并在COMMENTS表中创建一个条目,当增量成功发布到POST表时并且在更改COMMENTS表连接之前,问题就会开始。在这种情况下,POST和COMMENTS表将显示错误的数据。

如何做到这一点?

回答

2

这将是简单的,如果你有对数据库的控制,但Parse这样做意味着你有(其中您已经提到一个)两个主要问题:

  1. 至于我可以告诉,Parse不允许在查询中分组。这意味着(与您的模式)实际上不可能得到最喜欢/评论的职位,而不检索所有人。这是因为您实际上无法像使用标准SQL查询(使用JOIN和GROUP BY)那样实际添加具有喜欢/评论数量的新列。
  2. 您无法在一个事务中更新多个对象,因此用户可能会添加评论,但发布对象中的评论数量不会更改。

这样说我认为(至少如果你坚持使用解析),你必须添加'noOfLikes'和'noOfComments'列到Post对象。它不仅为检索N个顶级帖子提供了唯一可行的解​​决方案(没有获得全部顶级帖子),但我认为实际的不一致风险很低。您可以始终捕获网络(或其他)异常,并在本地临时存储更新请求并在稍后重试。

相关问题