Firestore 中的非规范化最佳实践
Denormalization best practices in Firestore
查看此 video,它有一个 tasks 集合,并且 clones/denormalizes 它自己集合中的所有已完成任务。
因此,它将有 2 个集合:tasks
和 completedTasks
。
我知道在 NoSQL 类型的数据库中推荐非规范化,我们必须针对数据库读取进行优化。关于这种方法,我有几个问题要问。
- 据我所知,Firestore 按结果集的数量而不是它读取的文档的数量向您收费。
- 其次,基于第一点,为什么不简单地通过
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 完全相同文档的查询,您将被收取两次费用。我什至写了一篇关于这个主题的文章:
查看此 video,它有一个 tasks 集合,并且 clones/denormalizes 它自己集合中的所有已完成任务。
因此,它将有 2 个集合:tasks
和 completedTasks
。
我知道在 NoSQL 类型的数据库中推荐非规范化,我们必须针对数据库读取进行优化。关于这种方法,我有几个问题要问。
- 据我所知,Firestore 按结果集的数量而不是它读取的文档的数量向您收费。
- 其次,基于第一点,为什么不简单地通过
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 完全相同文档的查询,您将被收取两次费用。我什至写了一篇关于这个主题的文章: