javascript - 如何在 firestore 中存储重复数据?

标签 javascript node.js firebase google-cloud-firestore

我一直在使用 firebase RTDB,我打算将它迁移到 firestore。

我有与许多其他 Node 关联的 userId。

例如,我有用户消息购买

为了将用户与其他集合相关联,我有 users_messages/$date/$userId/$messageIdpurchases/$date/$userId/$purchaseId,因为 RTDB不支持复杂查询,我希望能够查询特定用户日期范围内的消息。

现在我意识到,在数据查询方面,firestore 比 RTDB 好得多,并且有 messagespurchases 集合以及 date用户

在这种情况下,我应该将 userId 还是整个 user 文档存储在 messagespurchases 集合中?

最佳答案

一般来说,在 NoSQL 数据库中存储重复数据的最佳方式完全取决于项目的要求。没有一种适合所有人的正确解决方案。

你必须问一些关于你想复制的数据的问题:

  1. 它是静态的,还是会随着时间而改变?
  2. 如果它确实发生了变化,您是否需要更新每个重复的数据实例,以便它们都保持同步?
  3. 您是针对性能还是成本进行优化?

如果您的重复数据需要更改并保持同步,那么您可能很难使所有这些重复数据保持最新,并且您可能会花费大量金钱来使所有这些文档保持最新,因为这需要读取并为每个文档的每个更改编写。

如果您需要非常快的查询,您可能希望复制更多数据,以便客户端只需为每个查询项目读取一个文档,而不是多个文档。但是您也可以依靠本地客户端缓存来降低成本,具体取决于客户端必须读取的数据。

最后,对于是否复制某些数据,您的选择很大程度上取决于您的数据及其特性。您必须逐案考虑。

关于javascript - 如何在 firestore 中存储重复数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52927341/

相关文章:

javascript - 如何从 JS (ES6) 中的 for 循环修复 NaN?

javascript - NodeJS 用户注册/验证器

javascript - 在数组模型中使用不同的对象 AngularJS

javascript - 如何关闭 WebStorm 自动建议

javascript - 如何用另一个字母/特殊字符替换字符串中的所有字母?

android - FCMPluging 和 GooglePlus 冲突

java - 删除 Cloud Firestore 数据库中的集合时建议使用哪些参数?

javascript - 成功更新数据后再次进行ajax POST调用

Javascript 分配中的左侧无效

node.js - 使用 SMTP 的 Firebase 功能可以在模拟器中运行,但在部署时超时