我们正在使用 Azure cosmos DB,我们正在使用 mongo API 从 Java 访问它
一些通常使用大约 4 个 RU 的简单查询有时需要大约 1500 个 RU,我们得到消息“rate is too large”
如果我们从 azure 门户 UI 执行相同的查询,我们总是会得到较低的 RU 消耗
示例文档:
{
"_id": {
"$oid": "5c40a6e3f6fe4d1fec5f092e"
},
"attempts": 0,
"status": {
"confirmed": false,
"nSent": true
}
...
rest of non relevant fields
}
如果我将查询转换为 SQL,将如下所示:
SELECT * FROM c WHERE c.status.confirmed = true and (c.status.nSent=null or c.status.nSent=false) and (c.attempts=null or c.attempts<10)
2个重要提示:
- 我们在此查询中不使用分片键。我不知道这里是否相关
- 请注意,我们检查 c.status.nSent 不存在 (=null) 或者它等于 false。如果我们删除检查 c.status.nSent 是否为空的部分,则查询正常。这是奇怪的部分......
azure 的查询示例在他们的日志中看到:
(((r1["p1"]["p2"] = true) AND (((r1["p1"]["p3"] ?? null) = null) OR (r1["p1"]["p3"] = false))) AND ((((r1["p4"] ?? null) = null) OR (r1["p4"] <= 10)) AND (r1["p5"] >= 67)))","parameters":[]}"}}
我也尝试替换这部分查询
(c.status.nSent=null or c.status.nSent=false)
和
(c.status.nSent!=true)
希望它也适用于没有此属性但结果相同的文档
我们的平均 RU/s 使用量是 40 RU/s,我们的限制是 4000 RU/s,所以这个查询应该有很多备用 RU/s
在我们得到的例外情况下,我们看到:
RequestCharge: 0.38