用于存储用户上传的事件的数组或子集合



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

用户创建一个事件,该事件进入事件集合,在我的应用程序中,用户可以转到主页并查看事件集合中的事件列表。 我还想在应用程序中有第二个页面,即"用户配置文件"页面,用户可以在其中查看自己的事件列表,更新和删除它们。 我的问题是哪个会更好:

  1. 将事件的键存储在用户/用户 1 中的数组中
  2. 基本上将重复事件存储在名为 users/user1 的事件的子集合中

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

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

感谢您的任何反馈和建议

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

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

也请看一下我在这篇文章中的回答,我已经解释了更多关于Firestore中的collectionsmapsarrays

最新更新