【问题标题】:Automatic indexing in Comos DBCosmos DB 中的自动索引
【发布时间】:2020-03-01 08:51:36
【问题描述】:

我正在尝试为 COMOS 中的几个属性定义索引,但我对自动索引有点困惑。根据 Cosmos DB documentation:

默认情况下,Azure Cosmos DB 会自动为容器中的所有项目的每个属性编制索引,而无需定义任何架构或配置二级索引。

另外,请参考this

在某些情况下,您可能希望覆盖此自动行为以更好地满足您的要求。您可以通过设置容器的索引模式来自定义容器的索引策略,并包含或排除属性路径。

从以上几点我了解到,除非我们定义自定义索引策略,否则自动索引设置为true(这是有道理的)。但是,如果我们为索引定义了自己的包含和排除 paths,否则它应该是 false

这可能意味着,如果我如下定义容器属性,则 Cosmos DB 上的 Indexing Policy Automatic 属性应设置为 false

using Microsoft.Azure.Cosmos;  //Azure Cosmos SDK v3.3.1

 .

 .

var containerProperties = new ContainerProperties
        {
            Id = "SOME_CONTAINER_NAME",
            PartitionKeyPath = "/MY_PARTITION_KEY",
        };

 containerProperties.IndexingPolicy.IncludedPaths.Add(new IncludedPath {Path = "/\"{MY_PARTITION_KEY}\"/?"});         
     
 containerProperties.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath {Path = "/*"});

但是,我看到在 CosmosDb 索引上的上述配置被定义为 automatic 设置为 true

Automatic 属性和ExcludedPaths 属性在IndexingPolicy class 中是否无关?如果是这样,当我们在索引策略上定义了IncludedPathsExcludedPaths 时,automatic 属性意味着什么?

编辑 1

它变得有点棘手和混乱。即使在将 Automatic 属性设置为 false 后,该属性仍保留在门户中的 true

也就是说下面的代码似乎没有任何作用。

containerProperties.IndexingPolicy.Automatic = false;

编辑 2

即使我从门户settings 更新automatic 属性,该值也不会改变。而且我也没有收到任何错误。

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    我来自 CosmosDB 工程团队。 “自动”属性和包含/排除路径无关。

    现在大多数容器已弃用“自动”属性。通过在每个文档级别上覆盖索引指令,它可以用于将集合水平地隔离为两组文档 - 一组是二级索引的,另一组不是二级索引的。除了缺乏具体的业务价值之外,将自动属性设置为 false 还会导致根据查询是否使用索引(例如,与扫描相反)的查询结果不一致。所以我们现在已经弃用了该属性(它不能设置为 false)。

    我们一般所说的“自动索引”,就是你容器中所有文档中的所有路径都默认被索引。这可以从默认索引策略在 IncludedPaths 部分中包含 /* (“根”路径下的所有内容)这一事实中看出。希望这会有所帮助。

    【讨论】:

    • 嗨@Krishnan 感谢您的回复。我知道,如果我们索引所有属性(即默认自动索引),我们将对 RU 写入成本产生影响。有没有我可以参考的文件来了解“影响”有多大?我问这个的原因是因为如果影响不大,那么我们可以对所有字段进行索引。
    • 另外,我认为最好更新文档以更好地解释这一点。
    • 这是我之前用来计算 RU 的好工具。在线计算器不考虑索引策略等。github.com/RicardoNiepel/AzureCosmosDB-RequestUnitsTester
    • 您好 Ankit, 确定费用的最佳方法是在小集合上尝试使用(设置 IndexingMode = 一致)和不使用(IndexingMode = None)索引的典型文档的插入。我不愿提供具体数字,因为费用取决于每个文档的术语数量,而这又取决于工作量。
    • SDK 中应弃用 Automatic 属性,并在容器创建 UI 中隐藏...
    猜你喜欢
    • 2019-01-23
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多