首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Firestore的新闻提要收集和请求设计

使用Firestore的新闻提要收集和请求设计
EN

Stack Overflow用户
提问于 2018-10-08 12:28:50
回答 1查看 872关注 0票数 0

对于由文章组成的新闻提要(如附件中所示),在使用Firestore时,加载与每个帖子对应的用户名和用户图片的最佳方法是什么?

修复集合:

代码语言:javascript
复制
user
- userId 
- userName
- userPic

post
- postContent
- postDate
- userId // refers to the userId of a user stored in the users collection

中,如何以最有效的方式加载最新的10篇文章--其中包含相应的用户名和用户图片?

我认为对我不起作用的解决方案:

  • 在应用程序启动时加载所有用户数据,然后手动将存储在帖子中的用户id与加载的用户进行比较,以获得用户详细信息。为什么不行?用户太多,无法预先加载它们!
  • 将帖子发布到Firestore时,将用户名和用户图片保存在post文档中。为什么不行?因为在文章发布后,用户名和/或用户图片可能会更改!
  • 从Firestore中获取帖子,然后在应用程序中,对于每个单独的帖子,根据用户id从Firestore中获取相应的用户数据。为什么不行?有很多额外的请求要修复。例如,如果我想加载10个帖子,它将是对这10个帖子的一个请求,再加上另外10个请求,通过id获取每个用户,总共发出11个请求。

在发送结果之前,是否有一种方法可以让Firestore将用户数据与其末尾的帖子结合起来?(就像在实际数据库管理系统中那样)

EN

回答 1

Stack Overflow用户

发布于 2018-10-08 13:09:31

你猜对了,在前两种情况下,第三种情况可以解决你的问题。因为在Cloud中,Reference是一个支持的数据类型,所以您可以利用这个特性:

projects/PROJECT_ID/databases/DATABASE_ID/documents/DOCUMENT_PATH

所以您可以保存对用户对象的引用,这样您就可以很容易地获得它的详细信息。的确,你需要额外的阅读,但这是我能想到的最简单的方法,这样你就能实现你想要的。

您还可以通过添加用户对象作为post对象的属性来对数据进行去denormalize,但这意味着要对所有用户对象进行额外的更新,以防用户更改名称。因此,在这种情况下,您有太多额外的写操作。这种做法称为denormalization,在Firebase方面是一种常见的做法。为了更好的理解,我推荐你看这段视频,在Firebase数据库中,取消规范化是正常的。它适用于Firebase实时数据库,但同样的规则适用于。所以,多少复制数据和额外的数据库调用对你来说是最佳的,这取决于你的应用程序的用例和你的需求,以及你是否愿意放弃“单点定义思维”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52702336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档