Database 如何使用NoSQL对特定日期范围内的帖子进行投票排序?

Database 如何使用NoSQL对特定日期范围内的帖子进行投票排序?,database,nosql,Database,Nosql,我目前正试图了解NoSQL(这在SQL中有点难)。因为我想通过一些例子来更好地理解,所以我目前有点拘泥于以下内容: 假设我有以下集合:用户、帖子和投票。用户可以向上或向下投票并过滤帖子。我需要如何组织我的收集,以便高效地查询“过去24小时内最多被投票的帖子” 我的第一个猜测是: votes: user (user id) post (post id) value (down or upvote) posts: title votes: user (user id)

我目前正试图了解NoSQL(这在SQL中有点难)。因为我想通过一些例子来更好地理解,所以我目前有点拘泥于以下内容:

假设我有以下集合:用户、帖子和投票。用户可以向上或向下投票并过滤帖子。我需要如何组织我的收集,以便高效地查询“过去24小时内最多被投票的帖子”

我的第一个猜测是:

votes:
  user (user id)
  post (post id)
  value (down or upvote)

posts:
  title
  votes:
    user (user id)
    date
    value (down or upvote)

这种方法立即引起我注意的是:每次用户更改投票时,我都需要更新投票和帖子中的投票,对吗?除此之外,这将是我解决这个问题的方法,因为我可以访问每个帖子的投票日期。在这一点上,我唯一担心的是,这可能会因为成千上万的选票而产生问题。

在一个完美的世界里,你可以在帖子上记下一个数字。上升票会增加它,下降票会减少它。(只有在这种情况下才有原子操作。)这意味着每一个“给我看一篇文章(有投票权)都需要一个微小的读数。不幸的是,这并不能阻止用户重复投票

因此,使用两个表:一个用于帖子,一个用于用户

当用户投票时,您将其投票存储在users表中。该表存储UID+POSTID(主键)并存储其投票。您可以使用streams触发Lambda函数,该函数“复制”“向上/向下投票进入岗位。每个每个用户的upvote都存储在users first上,在那里进行重复数据消除,并且只有在用户投票中发生有效更改的情况下才会汇总到实际帖子上

这意味着每一篇“给我看一篇文章(有投票权)”都需要一次小小的阅读,“用户投票权”只需要两次简单的书写