在 Mongo API 查询中使用投影时对 Cosmos DB RU 的影响是什么

What is the influence on CosmosDB RUs when using projections in MongoAPI queries

我找不到任何关于“item size”是指原始文档大小还是投影后查询结果大小的信息。

我可以观察到像这样的简单查询

 documents.find({ /*...*/ }, { name: 1 })

消耗超过 1000 RU,用于 400 个项目的结果(查询字段已编入索引)。原始文档非常大,大约 500 kb。由于投影,实际接收到的数据很小。如果我删除投影,查询会运行几秒钟,但不会消耗更多的 RU(实际上稍微多一点,但似乎是因为它被分成了更多 GetMore 个调用)。

我听起来真的很奇怪,查询的成本主要取决于集合中原始文档的大小,而不是检索到的数据。真的是这样吗?我可以在不将数据拆分为多个集合的情况下降低此查询的成本吗?逻辑基本上是:“只需获取集合中所有这些大文档的 'name'”。

(数据库上没有分区...)

不幸的是,Microsoft 似乎并未发布其确定 RU 成本的公式,只是进行了广泛的描述。他们确实说 RU considerations:

As the size of an item increases, the number of RUs consumed to read or write the item also increases

因此成本取决于项目的原始大小,而不仅仅是读取操作输出的部分。如果您使用数据资源管理器 运行 一些查询并检查查询统计信息,您将看到两个指标,Retrieved Document SizeOutput Document Size。通过投影属性的子集,您可以减小输出大小,但不会减小检索到的大小。在对我的数据进行的测试中,我发现通过选择 return 属性,RU 费用的减少非常小——绝对不是与减少的输出成比例的节省。

从根本上说,无论是 属性 数据大小还是属性数量,缩小项目可能是最重要的工作。如果可以避免,您绝对不想要 500 KB 的项目。