Azure CLI设置Cosmos DB索引策略后与门户显示不一致的疑问
Cosmos DB索引策略自动补充配置的解释
这是Cosmos DB的正常默认行为,你的操作没有错误,并且门户显示的配置和你最初提交的配置是等效的,下面分两点解释细节:
1. 自动添加的/"_etag"/?排除路径
_etag是Cosmos DB的系统属性,用于并发控制(比如乐观锁机制),平台默认会自动排除这个属性的索引——无论你是否在索引策略中显式声明。Azure门户只是把这个默认行为可视化地展示出来了,并不会改变你原有的索引规则:即使你没写这个排除项,_etag也不会被索引,所以这个补充配置对实际索引逻辑没有影响。
2. 自动补充的String类型Range索引
当你为指定路径(这里是/ttl/?)添加Number类型的Range索引时,Cosmos DB会自动补充同路径下的String类型Range索引,这是平台的默认索引补充规则。不过你完全不用担心这个额外的索引会带来性能或存储负担:
- 你的
ttl字段存储的是Number类型的过期时间值,不会有String类型的数据写入这个路径,所以这个String类型的索引实际上不会生成任何索引条目,也不会占用额外资源。 - 这个补充的索引不会干扰你原本针对Number类型TTL的索引逻辑,你的查询依然会正常使用Number类型的Range索引。
验证方法
你可以通过Azure CLI执行以下命令,获取当前容器的索引策略,会发现返回的结果和门户显示的一致,这证明平台确实会自动补充这些默认配置:
az cosmosdb sql container show --resource-group <你的资源组> --account-name <你的Cosmos DB账户名> --database-name <数据库名> --name <容器名> --query "indexingPolicy"
总结来说,你最初提交的索引策略是正确的,门户显示的额外配置只是平台默认行为的可视化呈现,两者的实际索引效果完全一致。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

