Firestore 中的非规范化最佳实践

Denormalization best practices in Firestore

查看此 video,它有一个 tasks 集合,并且 clones/denormalizes 它自己集合中的所有已完成任务。

因此,它将有 2 个集合:taskscompletedTasks

我知道在 NoSQL 类型的数据库中推荐非规范化,我们必须针对数据库读取进行优化。关于这种方法,我有几个问题要问。

  1. 据我所知,Firestore 按结果集的数量而不是它读取的文档的数量向您收费。
  2. 其次,基于第一点,为什么不简单地通过 completed 属性 过滤它,而不是创建一个完全独立的 completedTasks 集合。在任何情况下,两者都将 return 相同数量的文档并且两者将具有相同数量的读取?我在这里遗漏了什么吗?

通过这种方法,我们不是可以节省数据库写入并防止数据库 update/delete 异常吗?

As far as I know, Firestore bills you with the number of result-set not the number of documents it reads.

恰恰相反。您需要支付的文档读取次数等于您的查询 return 编辑的文档数量。它与您的数据集有多大无关。假设您有 100 万份文档的集合,但您只查询 returns 10 个文档,那么您只需支付 10 次文档读取费用。

在线时,如果您执行两次 return 完全相同文档的查询,您将被收取两次费用。我什至写了一篇关于这个主题的文章: