gpt4 book ai didi

azure - EnableScan InQuiry 不再适用于新的 Cosmos DB 容器

转载 作者:行者123 更新时间:2023-12-02 23:27:25 24 4
gpt4 key购买 nike

我对 cosmos-db 索引策略和隐式全扫描感到困惑。

我的最终目标是:

  • 防止对非索引属性进行意外全面扫描
  • 仅对明确指定的属性建立索引

假设我有一张这样的 table :

{
"id": "transactions",
"indexingPolicy": {
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/transactionId/?"
},
{
"path": "/createdOn/?"
}
],
"excludedPaths": [
{
"path": "/*"
},
{
"path": "/\"_etag\"/?"
}
]
},
"partitionKey": {
"paths": [
"/chargePointId"
],
"kind": "Hash"
}
}

我认为这意味着我有 2 个一致的索引(在 transactionId 和createdOn 列上)。 Azure 门户不允许我指定索引类型:它“接受”更改,但是当它重新加载页面时,所有更改都消失了。

现在,我在禁用全扫描的情况下对不存在的列执行查询,假设它将失败并出现错误:已使用针对从索引中排除的路径的过滤器指定无效查询。考虑在请求中添加允许扫描 header 。

但是,这并没有发生。它工作正常并在控制台中打印 00:00:00

var policy = new ConnectionPolicy()
{
ConnectionMode = ConnectionMode.Gateway
};

var client = new DocumentClient(host, key, policy);

var queryText = "select * from c where c.asdasdasd > '2'";

var query = client.CreateDocumentQuery(
UriFactory.CreateDocumentCollectionUri("transactions", "transactions"),
queryText,
new FeedOptions
{
PopulateQueryMetrics = true,
EnableScanInQuery = false,
EnableCrossPartitionQuery = true,
}
).AsDocumentQuery();

var result = await query.ExecuteNextAsync();
var metrics = result.QueryMetrics;

Console.WriteLine(metrics.Single().Value.QueryEngineTimes.IndexLookupTime);

(代码取自本指南 https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-query-metrics )

我正在谈论的表是最近创建的(〜几周前)。我在另一个很久以前创建的数据库帐户中还有一个表。如果我尝试在该表上执行相同的操作 - 它会像我预期的那样失败。

我没有发现帐户或表臂模板(从 Azure 门户导出)有任何差异。

为什么它在新表上没有失败?它是否仍然默默地索引内容,或者新表不再考虑 EnableScanInQuery

最佳答案

我来自 CosmosDB 工程团队。我们正在逐渐删除对 EnableScanInQuery 的支持,因为它并未针对每个可能的查询(例如 SELECT * from r)统一强制执行。此外,当 EnableScanInQuery 设置为 false 时,仍然允许部分扫描(即使查询中选择性最少的谓词之一满足大量文档并且可以从索引提供服务,我们也会接受该查询,即使它可以有效地扫描)。对于今年年初开始的新容器,支持正在逐渐取消。优化查询以避免扫描的推荐方法是检查查询执行指标以确定是否需要对索引策略进行任何优化。

这实际上意味着,无论 EnableScanInQuery 如何,查询都可能降级为自动扫描以提供结果,并且对于不支持此选项的容器,用户不会看到任何错误消息。

关于azure - EnableScan InQuiry 不再适用于新的 Cosmos DB 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com