3

我们正在使用 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个重要提示:

  1. 我们在此查询中不使用分片键。我不知道这里是否相关
  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
4

0 回答 0