如何判断CosmosDB集合是否启用大分区键?100字节对应多少字符?
问题1:查询已有集合大分区键启用状态的方法
- 方案1:使用Azure CLI查询,执行命令:
az cosmosdb sql container show --resource-group <替换为资源组名称> --account-name <替换为CosmosDB账户名称> --database-name <替换为数据库名称> --name <替换为容器名称>
返回结果中查找partitionKey配置下的version字段:version值为2代表已启用大分区键,version值为1代表使用默认配置未启用。 - 方案2:使用各语言官方SDK读取容器属性,直接获取
PartitionKey.Version字段判断,规则和CLI返回结果一致。
问题2:分区键编码规则与字节对应说明
- 分区键底层采用UTF-8变长编码,100字节对应的字符数量不固定:
- 英文、数字、半角符号等ASCII范围内的字符,单字符占1字节,100字节最多对应100个字符
- 中文、全角符号等常用Unicode字符,单字符占3字节,100字节最多对应33个字符
- Emoji等特殊Unicode字符,单字符占4字节,100字节最多对应25个字符
异常场景适配说明
你遇到的"Resource with id already exists with a conflicting hashed partition key, Please retry with a different partition key."报错,本质是默认(version=1)分区键模式下仅对分区键前100字节做哈希,当两个不同的分区键前100字节完全一致时,会产生哈希碰撞,系统会误判为分区键冲突。
你的场景下分区键前75-90个字符基数很低,极容易出现前100字节重复的情况,确认当前容器partitionKey.version为1的话,迁移到启用大分区键(version=2)的容器即可解决该问题。
内容的提问来源于stack exchange,提问作者James World
相关产品推荐
相关产品推荐

