【问题标题】:Azure Cosmos Query against Date By RangeAzure Cosmos 按范围查询日期
【发布时间】:2021-08-26 13:54:11
【问题描述】:

我正在针对数据类型为 Datetime 的一个字段查询数据,例如我的查询如下所示,

Select * from c where c.datetime >= '19/04/2021' and c.datetime <= '23/04/2021'and c.age = 25

读取数据时没有问题,但它花费了太多时间和 RU。

有人可以通过给我一个示例代码来建议我或帮助我,以便为上述查询在 cosmos 索引策略中添加范围或复合索引。

【问题讨论】:

  • partitionKey是什么
  • 不涉及查询分区键
  • @Sajeetharan 是否有可能在 30 秒内一次性获取 50,000 条记录,(我们有机会吗)
  • 这看起来像是复合索引的用途。您是否尝试过任何基于文档的变体?

标签: .net-core azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

当您有一个缓慢或高请求单元 (RU) 查询时,您可以使用复合索引对其进行优化。默认情况下,没有定义复合索引,因此您必须根据需要添加复合索引。

查询:

Select * from c where c.age = 25 and c.datetime >= '19/04/2021' and c.datetime <= '23/04/2021';

复合索引:

(age ASC, datetime ASC)

正如 MS 文档 here 中所述:

注意:添加复合索引时,查询将利用现有的范围索引,直到添加新的复合索引 完全的。因此,当您添加复合索引时,您可能不会 立即观察性能改进。可以追踪 索引改造进度by using one of the SDKs

欲了解更多详情,请查看:Composite indexing policy examplesUpdating indexing policy using the Azure portal

{  
        "automatic":true,
        "indexingMode":"Consistent",
        "includedPaths":[  
            {  
                "path":"/*"
            }
        ],
        "excludedPaths":[],
        "compositeIndexes":[  
            [  
                {  
                    "path":"/age"
                },
                {  
                    "path":"/datetime"
                }
            ]
        ]
}

指定顺序是可选的。如果未指定,则顺序为升序。

【讨论】:

    【解决方案2】:

    使用日期时间

    我正在针对数据类型为日期时间的一个字段查询数据..

    首先,CosmosDB 是 JSON 文档的文档存储。 JSON notation does NOT have a data type DateTime。如果您查看查询,您实际上是在传递字符串。如果您查看存储的文档,您正在存储字符串。 CosmosDB 不知道也不关心它们是否代表您应用中的时间点。

    因此,查询(和索引)中日期时间的顺序不是按时间顺序排列的,而是按字面顺序排列的。不过,您很可能想要前者。

    要使带有日期时间的字符串可以作为时间索引,您必须使用文字顺序和时间顺序相同的格式。通常是 ISO-8601。

    您应该首先阅读以下内容以了解更多详细信息: Working with Dates in Azure Cosmos DB.

    关于复合索引

    这在很大程度上取决于您如何建模数据、数据分布和优化优先级,但是...

    ... 通常首选更简单且更通用的单路径索引,因为索引大小更小且可重用性更高。虽然您可以添加大量复合索引以在特定查询中获得少量收益,但每个添加的索引确实会带来索引维护(插入、更新、删除)+ 开发维护+索引存储的成本。在添加较重的索引之前,请务必添加您实际使用的添加索引并测试 RU 成本。

    另见:Performance tips for Azure Cosmos DB and .NET - Indexing policy

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多