【发布时间】:2017-11-15 08:35:11
【问题描述】:
好的,所以 CosmosDb 集合将其索引策略设置为一致、自动、具有默认哈希和范围索引并且我们添加了一个指向我们自己的时间戳属性的路径,以便按它们进行排序。
我知道路径是正确的,因为除非我设置它们,否则我无法按它们订购。但是:
当按 Cosmos 内置属性 _ts 排序时 - OrderBy 查询的成本约为 20 RU/s。那太棒了。 现在,当按我们的 OWN 时间戳列进行排序时(我们有两个,其中一个是字符串时间戳,另一个是基于 Unix 的数字,就像内置的 _ts列。 此查询花费 400 RU/s !???
设置新的索引规则使我们能够对其进行查询和排序,但是 RUs 太疯狂了。为什么会这样,我们如何解决它?
我知道您之前无法更改 Ad Hoc 索引策略,但 Microsoft 已解决此问题。
编辑:这是一个简单的集合,没有配置分区,查询只针对这个集合运行,只选择一个文档(前 1 个)。
SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c.EndFetchDateTimeUtcUnix DESC
对比
SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c._ts DESC
索引如下所示:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/",
"indexes": [
{
"kind": "Hash",
"dataType": "Number",
"precision": 3
},
{
"kind": "Hash",
"dataType": "String",
"precision": 3
}
]
},
{
"path": "/EndFetchDateTimeUtcUnix/?",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Hash",
"dataType": "String",
"precision": 3
}
]
}
],
"excludedPaths": []
}
【问题讨论】:
-
您能否提供其他信息,包括从您的自定义查询返回的文档数量与 _ts 的顺序以及此查询是否仅限于单个分区?
-
当然,只有一个。使用查询和索引编辑了上面的帖子。
标签: azure indexing azure-cosmosdb