android - 我应该在 Firestore 的字段文档中只写标识符还是写所有数据?

标签 android ios firebase google-cloud-firestore

我实际上是编程和 Firebase 方面的新手。我需要知道这两种情况中哪一种更好。

我正在制作一个 Activity 应用程序。如果用户将参加该 Activity ,我会在嵌套在“用户”集合中的子集合“attendedEvents”中编写一个文档,如下所示:

enter image description here

然后,我需要管理并向客户端应用程序显示该参加 Activity 的完整数据,我需要显示位置、坐标、地点等数据。

有两种方法可以保存参加过的 Activity 数据

1. 我只是在“attendedEvents”子集合中写入 eventID。像这样

enter image description here

然后当我需要显示完整数据时,我需要执行 2 个步骤。首先,我获取该“attendedEvents”子集合中的所有 eventID,然后专门根据 eventID 进行查询以获取完整的事件数据。

2. 我在“attendedEvents”子集合字段中写入所有事件数据,而不仅仅是 eventID。像这样

enter image description here

所以当我需要在客户端应用程序中显示事件数据时,我只需要执行一个查询来引用“attendedEvents”子集合。

这两者的优缺点是什么?

老实说我不太确定选择。但目前我会选择只写 eventID,因为在 firebase 中有存储定价,即使当我向客户端应用程序显示参加的事件数据时,数据实时同步并不是真正需要的

网络带宽如何?因为您需要为 Cloud Firestore 请求使用的网络带宽付费,因为第一个选择需要更多带宽,对吗?我不是很了解这个网络带宽

最佳答案

这两种方法都是有效的,并且没有哪一种方法比另一种方法更好。这完全取决于您的用例是什么,以及您对复制数据的适应程度。

在第一种方法中,您写入的重复数据非常少(几乎只是 ID)。因此,这意味着用于写入这些数据的代码将非常简单且非常快。但是在读取数据时,您将需要从两个集合中加载数据。对于合理数量的文档,这通常不是一个大的性能问题,但确实需要更多代码和更多 API 调用。

在第二种方法中,您可以为每个 attendedEvents 文档复制一个事件的所有数据。这意味着写入此数据的代码更加复杂,并且您肯定会存储更多数据。您需要弄清楚是否以及如何使其保持最新(有关更多信息,请参阅 my answer here)。但另一方面,读取 attendedEvent 文档现在可以一次性为您提供有关事件文档的所有信息。

这是 NoSQL 数据库中的一个常见考虑因素:您通常需要考虑写入性能和磁盘存储与读取性能和可伸缩性。正如我一开始所说的:没有任何答案在所有情况下都是最好的。这完全取决于您的应用最重要的标准是什么。

关于android - 我应该在 Firestore 的字段文档中只写标识符还是写所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50918681/

相关文章:

ios - 位码和dylib

ios - 在从 Environment.SpecialFolder.LocalApplicationData 加载的文件上设置 BaseUrl

firebase - Firebase 控制台是否已死(未显示项目)?

android - 布局 setMargins 在横向模式下不起作用

java - 存在不同情况的资源,并且不生成类文件

ios - AVFoundation 输出的图像仅占屏幕的 1/4

node.js - 尝试将 firebase-tools 安装到 Mac Big Sur 时出现 EACCES 错误

javascript - 如何获取Firestore中离线的记录

java - Eclipse Ctrl+Space 替换 Word?

android - 如何在 Firebase 上获取数组数据?