簡體   English   中英

Azure Cosmos 按范圍查詢日期

[英]Azure Cosmos Query against Date By Range

我正在針對一個數據類型為 Datetime 的字段查詢數據,例如我的查詢如下所示,

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

讀取數據時沒有問題,但它花費了太多時間和 RU。

有人可以通過給我一個示例代碼來建議我或幫助我在上述查詢的 cosmos 索引策略中添加范圍或復合索引。

當您有一個慢速或高請求單位 (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 文檔中所述:

注意:添加復合索引時,查詢將利用現有的范圍索引,直到新的復合索引添加完成。 因此,當您添加復合索引時,您可能不會立即觀察到性能改進。 可以使用其中一個 SDK跟蹤索引轉換的進度。

有關更多詳細信息,請查看: 復合索引策略示例使用 Azure 門戶更新索引策略

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

指定順序是可選的。 如果未指定,則順序為升序。

在此處輸入圖像描述

使用日期時間

我正在針對一個數據類型為 Datetime 的字段查詢數據。

首先,CosmosDB是JSON個文檔的文檔存儲。 JSON 表示法沒有數據類型DateTime 如果您查看查詢,您實際上是在傳遞字符串。 如果您查看存儲的文檔,就會發現您存儲的是字符串。 CosmosDB 不知道也不關心它們是否代表您應用程序中的時間點。

因此,查詢(和索引)中日期時間的順序不是按時間順序排列的,而是按字面順序排列的。 不過,您很可能想要前者。

要使帶有日期時間的字符串可作為時間進行索引,您必須使用文字順序和時間順序相同的格式。 通常是 ISO-8601。

您應該首先閱讀以下內容以獲取更多詳細信息: Working with Dates in Azure Cosmos DB

關於復合索引

這在很大程度上取決於你 model 你的數據,數據分布和優化優先級,但是......

...通常更簡單、更通用的單路徑索引是首選,因為索引大小更小,可重用性更高。 雖然你可以添加很多復合索引來在特定查詢中獲得小的收益,但每個添加的索引確實會帶來索引維護(插入、更新、刪除)+開發維護+索引存儲的成本。 DO add only add indexes you actually use and test the RU cost before adding heavy indexes.

另請參閱: Azure Cosmos DB 和 .NET 的性能提示 - 索引策略

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM