cosmosDB 上的 Azure RU

标签 azure azure-cosmosdb

我正在尝试了解 RU 的工作原理,以便优化对数据库发出的请求。

我有一个简单的查询,其中按 id 选择

SELECT * FROM c WHERE c.id='cl0'

该查询花费 277.08 RU

然后我有另一个查询,我通过另一个属性进行选择

SELECT * FROM c WHERE c.name[0].id='35bfea78-ccda-4cc5-9539-bd7ff1dd474b' 

该查询花费 2.95 RU

我不明白为什么这两个查询之间消耗的 RU 存在如此大的差异。

两个查询返回完全相同的结果

[
    {
        "label": "class",
        "id": "cl0",
        "_id": "cl0",
        "name": [
            {
                "_value": "C0.Iklos0",
                "id": "35bfea78-ccda-4cc5-9539-bd7ff1dd474b"
            }
        ],
        "_rid": "6Ds6AJHyfgBfAAAAADFT==",
        "_self": "dbs/6Ds4FA==/colls/6Ds6DFewfgA=/docs/6Ds6AJHyfgBdESFAAAAAAA==/",
        "_etag": "\"00007200-0000-0000-0000-w3we73140000\"",
        "_attachments": "attachments/",
        "_ts": 1528722196
    }
]

最佳答案

我之前遇到过类似的问题,所以您不是唯一面临此问题的人。我为您提供两种解决方案。

1.sql SELECT * FROM c WHERE c.id='cl0' 在整个数据库中查询文档。如果您可以为正确的字段创建分区键,它将大大提高您的性能。 你可以引用这个doc了解如何选择分区键。

2.我在帖子中找到了以下答案:Azure DocumentDB Query by Id is very slow

Microsoft 支持人员做出了回应,并解决了该问题。他们为该集合添加了 IndexVersion 2。不幸的是,它还不能从门户获得,并且新创建的帐户/集合仍然没有使用新版本。您必须联系 Microsoft 支持人员才能对您的帐户进行更改。

我建议您提交反馈here追踪此公告。

希望对您有帮助。

-- 编辑

要升级到索引版本 2,请使用以下代码

var  collection = (await client.ReadDocumentCollectionAsync(string.Format("/dbs/{0}/colls/{1}", databaseId, collectionId))).Resource;                
collection.SetPropertyValue("IndexVersion", 2);
var replacedCollection = await client.ReplaceDocumentCollectionAsync(collection);

关于cosmosDB 上的 Azure RU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51756440/

相关文章:

azure - Cosmos db readDocument api 在存储过程中不起作用

azure - 自动关闭Azure功能

.net - 为什么 .NET Web 请求类在没有身份验证 header 的情况下重新运行请求?

azure - ARM 模板是否会覆盖脚本创建的现有资源?

hadoop - 在Hadoop作业中如何从DocumentDB获取数据

Azure CosmosDB 我无法获得超过 1500 RU

mongodb - 使用 Azure MongoDB 的 Meteor

c# - Azure 成员(member)帐户访问问题

Azure SQL sp_execute_remote 不支持输出参数

azure - 调用 New-AzureRmADApplication 时无法将 TokenCloudCredentials 转换为 AccessTokenCredential