首页 > 解决方案 > Firebase Firestore 结构,用于获取不可见的热门帖子 - 社交

问题描述

这是当前的样本结构

Posts(Collection)
    - post1Id : {
          viewCount : 100,
          likes     : 45,
          points    : 190,
          title     : "Title",
          postType  : image/video
          url       : FileUrl,
          createdOn : Timestamp,
          createdBy : user20Id,
          userName  : name,
          profilePic: url
      }
Users(Collection)
    - user1Id(Document):{
          postsCount : 10,
          userName  : name,
          profilePic : url
      }
        viewed(Collection)
            - post1Id(Document):{
                  viewedTime : ""
              }
                 
    - user2Id(Document)

最终目标是

什么是可能的最佳解决方案(例如更改结构、云功能、来自客户端的多个查询)?

标签: firebasegoogle-cloud-firestore

解决方案


我正在研究一种解决方案,以显示热门帖子并消除用户已经看到的帖子或不良内容。处理两个查询真的很痛苦,尤其是当用户群增加时。很难维护“已查看”集合并过滤新帖子。想象一下,有 100 万个查看过的帖子,然后过滤掉未看过的帖子。

所以我想出了一个解决方案,虽然不是很好,但仍然很酷。

所以这是我们的数据结构

帖子(集合)--postid(文档)

  1. 标题。
  2. 描述。
  3. 图片。
  4. 时间戳。
  5. 优先

这是一个包含基本细节的简单帖子结构。你可以看到我添加了一个优先级字段。这个领域会变魔术。

如何使用优先级。

  1. 我们应该查询以较高优先级开始并以较低优先级结束的帖子。
  2. 当用户发布新帖子时。将当前时间戳分配为默认优先级。
  3. 当用户对帖子点赞(喜欢)时,将优先级提高 1 分钟(60000 毫秒)
  4. 当用户对帖子投反对票(不喜欢)时,将优先级降低 1 分钟(60000 毫秒)
  5. 您可以每 24 小时重置一次优先级。如果您今天早上开始浏览提要,您将看到过去 24 小时内的帖子。达到 24 小时持续时间后,您可以将优先级重置为当前时间。可以根据您的需要更改 24 小时限制。您可能希望每 15 分钟重置一次限制。因为每 15 分钟可能会添加 100 条新帖子。此限制将确保提要中的内容重复。

因此,当您开始滚动提要时,您将首先获得所有热门帖子,然后再获得优先级较低的帖子。如果您今天发布帖子并且人们开始支持它。它将获得更长的生命周期,从而压倒糟糕的内容,并且当您对其投反对票时,只要用户无法访问它,它就会将帖子下推。

使用时间戳作为优先级,因为旧帖子应该随着时间的推移而失去优先级。即使是今天的热门帖子明天也应该失去优先权。

需要考虑的事项:

使用寿命可以根据您的需要而有所不同。用户群越大。你应该降低生命周期价值。因为如果今天发布的帖子得到 10,000 名用户的投票,那么它在未来 6.9 天的趋势是。如果有超过 100 个帖子被超过 10,000 名用户点赞,那么在这 6.9 天内您将永远看不到新帖子。因此,热门帖子几乎不会持续一两天。

因此,在这种情况下,您可以提供 10 秒的生命周期,对于 10,000 次投票,它将提供 1.1 天的生命周期。

这不是一个完美的解决方案,但它可以帮助您入门。


推荐阅读