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

emi*_*mil 3 javascript node.js firebase google-cloud-firestore

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

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

例如,我有users,,messagespurchases

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

现在我意识到 firestore 在数据查询方面比 RTDB 好得多,并且将具有messages、和 的purchases集合。dateuser

在这种情况下,我应该将userId整个user文档存储在messages集合中purchases吗?

Dou*_*son 5

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

您必须询问一些有关要复制的数据的问题:

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

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

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

最后,您选择是否复制某些数据,很大程度上取决于您的数据及其特征。您必须根据具体情况进行思考。