javascript - 用于存储用户上传的事件的数组或子集合
问题描述
我正在创建一个带有本机反应的事件应用程序。我只是想要一些建议,哪些是在 Firestore 中构建我的数据模型的更好性能和可扩展性的方法。我有 2 个集合事件和用户。
用户创建一个进入事件集合的事件,然后在我的应用程序中,用户可以进入主页并查看事件集合中的事件列表。我还希望在应用程序中有第二个页面,即“用户个人资料”页面,用户可以在其中查看自己的事件列表,更新和删除它们。我的问题是哪个会更好:
- 将事件的密钥存储在 users/user1 的数组中
- 基本上在 users/user1 中称为 events 的子集合中存储重复事件
我觉得选项 1,将文档的引用存储在数组中可能会更好,所以我没有重复的事件,如果用户必须更新事件,只需要写入 1 次事件集合中的实际事件。
该事件将来可能会有更多字段出现,例如评论字段等,所以我觉得只使用选项 1 我不必继续做双重工作,尽管我可能需要阅读两次,即阅读用户/ user1->(然后是数组)events:[event:{dockey}],然后使用该键获取事件集合中的实际事件文档。
感谢您的任何反馈和建议
解决方案
当您需要在这两个选项之间进行选择时,没有简单的正确或错误答案。数据复制是加快读取速度的关键,不仅在 Firebase 实时数据库或 Cloud Firestore 中,在一般情况下也是如此。每当您将相同的数据添加到不同的位置时,您都在复制数据以提高读取性能。不幸的是,作为回报,您有更复杂的更新和更高的存储/内存使用率。但您需要注意,Firebase 实时数据库中的额外调用并不昂贵,而在 Firestore 中则如此。多少重复数据与额外的数据库调用对您来说是最佳的,这取决于您的需求以及您是否愿意放弃“单点定义心态”,这也可以称为非常主观的。
在完成几个 Firebase 项目后,我发现如果我复制数据,我的阅读代码会变得非常简单。但当然,编写代码同时变得更加复杂。这是这两者和您的需求之间的权衡,决定了您的应用程序的最佳解决方案。
还请查看我在这篇文章中的回答,我在该文章中解释了更多关于collections
,maps
和arrays
Firestore 的内容。
推荐阅读
- cuda - CUDA 分析工具“没有分析内核”
- python - 如何迭代地多处理成几个numpy数组?
- node.js - 根突变/查询中有多个 GraphQL 实体?
- python - 从 PyTorch 中的数据加载器打印随机样本
- symfony - Symfony Security 的 getUser 方法无法获取我的用户存储库
- python - sqlalchemy.exc.ArgumentError:在映射类 Show->shows 上找不到名为“Show”的属性在此查询中
- sql - 在 SQL Server 中获取特定字符之后和之前的名称
- sql-server - 将 Kusto 表导出到 SQL Server GENERATED ALWAYS 列
- amazon-web-services - AWS Serverless - 转移账户后拒绝访问
- swift5 - 'UIColor' 类型的值没有成员 'adjust'