【问题标题】:Firestore(Firebase) store big listFirestore(Firebase) 存储大名单
【发布时间】:2020-07-24 22:47:01
【问题描述】:

我对 Firestore 中的大列表存储有一个问题(使用颤振)。 我有一个这样的数据库:

--数据库

-----发布

---------评论

并且每个帖子/评论都必须存储喜欢/添加收藏的用户列表。

我第一次在我的收藏帖子/评论中创建了两个列表

但我知道解决方案不好,因为文档的大小是有限的 所以我想到了第二种解决方案,它包括在 Post / Comment 集合中添加一个集合“userData”,并为每个用户创建一个包含数据的文档。像这样 :

但第二种解决方案让我很困扰。因为当用户加载帖子列表和评论列表时,对于每个帖子/评论我都会做一个额外的查询来查找用户是否已经喜欢/添加了收藏。 因此,如果我每个帖子有 50 个 cmets,并且如果用户查看 100 个帖子,它会生成 10,000 个请求(100 * 50 * 2),并且每个用户都会生成。

恐怕这些请求的价格并不能涵盖应用程序的收益。

那么,第二种解决方案是推荐的解决方案吗?还有其他解决方案吗?

谢谢

【问题讨论】:

  • 您只需要阅读当前用户的userData 文档,并检查他们的isFav 字段,这样每个帖子/评论只需读取一个文档。还是我错过了什么?在代码中看到它可能会更清楚。
  • 感谢您的回答!它需要一个检索帖子/评论的请求和一个检索用户数据的请求。因此,每个帖子/评论总共有两个请求。我可以通过仅使用一个查询检索多个帖子/评论来限制请求数量,但每个评论/帖子仍需要查询 userData。那么它可能是唯一的解决方案,我只是想确定
  • 而不是做 1 个查询以获得 10 个帖子。我为获取 10 个帖子进行 1 次查询,为获取 userData 进行每个帖子的 1 个查询。所以我不是做 1 个查询,而是做 11 个查询。

标签: firebase flutter google-cloud-firestore


【解决方案1】:

我会为此使用子集合,并且在用户浏览帖子列表时根本不显示 cmets 列表(或仅显示最新评论)。一旦用户与帖子交互,然后使用 query-cursors 对 cme​​ts 集合进行分页或创建无限滚动

【讨论】:

  • 感谢您的回答。这就是我所做的。这减少了查询的数量。但是根据用户的使用情况,仍然会引起非常大量的查询。对于每条评论/帖子,我应该为获取 userData 提出 1 个额外请求。然而,也许这是唯一的解决方案。
猜你喜欢
  • 2020-08-16
  • 2020-08-31
  • 2018-06-28
  • 2020-06-19
  • 2020-07-03
  • 2021-07-18
  • 1970-01-01
  • 2018-08-10
  • 2019-11-15
相关资源
最近更新 更多