【问题标题】:Are Cosmos DB indexes range by default?Cosmos DB 索引是否默认范围?
【发布时间】:2020-03-02 17:13:27
【问题描述】:

我有一个大约 4gb 的 cosmos db,当它很小的时候,它可以以较低的 RU 值(3 - 15ish)相对快速地执行日期过滤器,但是随着数据库已经增长到包含数百万条记录,它现在已经放慢了速度并且RU 值高达数千。

查看日期https://docs.microsoft.com/en-us/azure/cosmos-db/working-with-dates 的文档是说

要有效地执行这些查询,您必须配置您的 字符串范围索引的集合

但是阅读链接索引策略文档 (https://docs.microsoft.com/en-us/azure/cosmos-db/index-policy) 听起来默认情况下每个字段都创建了一个范围索引

新创建容器的默认索引策略为每个项目的每个属性编制索引,对任何字符串或数字强制执行范围索引,对任何 Point 类型的 GeoJSON 对象强制执行空间索引

我是否需要将索引配置为默认值以外的任何内容?

{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
    {
        "path": "/*"
    }
],
"excludedPaths": [
    {
        "path": "/\"_etag\"/?"
    }
]

}

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    在索引方面,您可以从here 中看到最佳实践,

    您应该从索引中排除未使用的路径以加快写入速度。 您应该利用 IndexingPolicy 与 IncludedPaths 和 ExcludedPaths

    例如:

    var collection = new DocumentCollection { id = "excludedPathCollection"};
    collection.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });
    collection.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/nonIndexedContent/*");
    

    【讨论】:

      【解决方案2】:

      因此,如果您担心查询成本,索引将不会真正有帮助。写入成本取决于索引,而不是读取。如果您看到每个请求有数千个 RU,我怀疑您正在使用跨分区查询,或者您根本没有分区(或所有内容都只有一个分区)。要降低这些成本,您需要停止使用跨分区查询,或者(如果前者不可行)以不需要使用跨分区查询的方式重新架构您的数据。

      我认为 range 是 cosmos db 中的默认索引

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 2011-05-23
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多