【问题标题】:should I just write identifier or write all the data in the fields document of Firestore?我应该只写标识符还是在 Firestore 的字段文档中写所有数据?
【发布时间】:2018-06-18 23:20:33
【问题描述】:

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

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

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

有两种方法可以保存参加的活动数据

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

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

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

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

这两者之间的优缺点是什么?

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

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

【问题讨论】:

    标签: android ios firebase google-cloud-firestore


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 2012-05-14
      • 2010-09-22
      • 2012-06-08
      • 2021-11-23
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多