首页 > 解决方案 > 用于存储用户上传的事件的数组或子集合

问题描述

我正在创建一个带有本机反应的事件应用程序。我只是想要一些建议,哪些是在 Firestore 中构建我的数据模型的更好性能和可扩展性的方法。我有 2 个集合事件和用户。

用户创建一个进入事件集合的事件,然后在我的应用程序中,用户可以进入主页并查看事件集合中的事件列表。我还希望在应用程序中有第二个页面,即“用户个人资料”页面,用户可以在其中查看自己的事件列表,更新和删除它们。我的问题是哪个会更好:

  1. 将事件的密钥存储在 users/user1 的数组中
  2. 基本上在 users/user1 中称为 events 的子集合中存储重复事件

我觉得选项 1,将文档的引用存储在数组中可能会更好,所以我没有重复的事件,如果用户必须更新事件,只需要写入 1 次事件集合中的实际事件。

该事件将来可能会有更多字段出现,例如评论字段等,所以我觉得只使用选项 1 我不必继续做双重工作,尽管我可能需要阅读两次,即阅读用户/ user1->(然后是数组)events:[event:{dockey}],然后使用该键获取事件集合中的实际事件文档。

感谢您的任何反馈和建议

标签: javascriptarraysfirebasereact-nativegoogle-cloud-firestore

解决方案


当您需要在这两个选项之间进行选择时,没有简单的正确或错误答案。数据复制是加快读取速度的关键,不仅在 Firebase 实时数据库或 Cloud Firestore 中,在一般情况下也是如此。每当您将相同的数据添加到不同的位置时,您都在复制数据以提高读取性能。不幸的是,作为回报,您有更复杂的更新和更高的存储/内存使用率。但您需要注意,Firebase 实时数据库中的额外调用并不昂贵,而在 Firestore 中则如此。多少重复数据与额外的数据库调用对您来说是最佳的,这取决于您的需求以及您是否愿意放弃“单点定义心态”,这也可以称为非常主观的。

在完成几个 Firebase 项目后,我发现如果我复制数据,我的阅读代码会变得非常简单。但当然,编写代码同时变得更加复杂。这是这两者和您的需求之间的权衡,决定了您的应用程序的最佳解决方案。

还请查看我在这篇文章中的回答,我在该文章中解释了更多关于collections,mapsarraysFirestore 的内容。


推荐阅读