用于获取未见趋势帖子的 Firebase Firestore 结构 - 社交

Pav*_*rma 5 firebase google-cloud-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)
Run Code Online (Sandbox Code Playgroud)

最终目标是

  • 我需要获取当前用户未查看的帖子,并按分页降序排列。

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

小智 7

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

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

这是我们的数据结构

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

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

这是一个包含基本细节的简单帖子结构。您可以看到我添加了一个优先级字段。这个字段将会发挥魔力。

如何使用优先级。

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

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

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

需要考虑的事项:

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

因此,在这种情况下,您可以给出 10 秒的生命周期,对于 10,000 个赞成票,它将给出 1.1 天的生命周期。

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