我实际上是编程和Firebase的新手。我需要知道在这两种情况之间哪一种更好。
我正在制作一个活动应用。如果用户将参加活动,我会在子集合中编写一份文件" attendEvents"嵌套在"用户"像这样的集合:
然后,我需要管理并向客户端应用程序显示该有人值守事件的完整数据,我需要显示位置,坐标,场地等数据。
有两种方法可以保存有人参与的事件数据
1。我只是在" attendEvents"中写了eventID。子集合。像这样
然后当我需要显示完整数据时,我需要做两个步骤。首先,我得到了所有的eventID" attendEvents" subcollection,然后专门根据eventID进行查询以获取完整的事件数据。
2。我在" attendEvents"中写下所有事件数据。子集合字段,而不仅仅是eventID。像这样
所以当我需要在客户端应用程序中显示事件数据时,我只需要执行一个查询来引用" attendEvents"子集合
这两者之间的优势和劣势是什么?
说实话,我不太确定要选择。但是目前我会选择只编写eventID,因为firebase中存在存储定价,即使实际上并不需要数据实时同步,当我向客户端应用程序显示有人参与的事件数据时。网络带宽怎么样?既然您需要为Cloud Firestore请求使用的网络带宽付费,因为首选需要更多带宽吗?我并没有真正掌握这个网络带宽
答案 0 :(得分:1)
两者都是有效的方法,它们都没有比另一方更有针对性。这一切都取决于您的用例,以及复制数据的舒适程度。
在你的第一种方法中,你写的重复数据很少(只是ID)。这意味着您编写此数据的代码将变得非常简单且非常快。但是在读取数据时,您需要从两个集合中加载数据。对于合理数量的文档而言,这通常不是一个重要的性能问题,但肯定需要更多的代码和更多的API调用。
在第二种方法中,您复制每个attendedEvents
文档的事件的所有数据。这意味着编写此数据的代码更复杂,您肯定会存储更多数据。而且您需要弄清楚是否以及如何使其保持最新(有关详细信息,请参阅my answer here)。但另一方面,阅读attendedEvent
文档现在可以在一次阅读中为您提供有关事件文档的所有信息。
这是NoSQL数据库中的一个常见问题:您经常需要考虑写入性能和磁盘存储与读取性能和可伸缩性。在我开始时:在所有情况下都没有最好的答案。这完全取决于您的应用最重要的标准是什么。