首页 > 解决方案 > 如何判断 CosmosDb 集合是否使用大分区键,以及 100 字节有多少个字符?

问题描述

你能判断一个 cosmos 集合是否使用了大的分区键散列吗?

本文档介绍 Cosmos Db 中的大分区键功能:https ://docs.microsoft.com/en-us/azure/cosmos-db/large-partition-keys?tabs=dotnetv3

它描述了如何在门户中创建新集合并在高级设置中设置大分区键,但没有描述如何判断现有分区是否具有此集合。可能吗?

100 字节的分区键有多少个字符?

此外,该文档描述了默认使用分区键的前 100 个字节。分区键的底层编码是什么?也就是说,我试图确定分区键 100 字节中有多少个字符。例如,它是基于 UTF8 编码还是 UTF16?等等

问的动机是我继承了一个数据库,其中提到"Resource with id already exists with a conflicting hashed partition key, Please retry with a different partition key."了一个集合中提到的多个冲突异常实例,其中绝对没有现有的分区键 + id 冲突,但分区键的基数很高,但前 75-90 个字符的基数很低. 我怀疑将需要迁移到启用了大分区键设置的容器,或者更激烈的事情。:(

标签: azure-cosmosdb

解决方案


检测分区键类型

可以在导出的 ARM 模板中看到分区键类型 - 大键的版本为“2”:

"partitionKey": {
                        "paths": [
                            "/id"
                        ],
                        "kind": "Hash",
                        "version": 2
                }

分区键哈希

我在这里做了一些实验。我创建了一个带有版本 1 哈希和分区键的集合/pid

有了这个,我创建了一个> /pid100 个字符和一个/id.1

我无法/pid在. 当我在第 100 个字符中出现差异时,就可以了。所以我相当肯定编码是 UTF8,因为我使用的是 ASCII 范围内的字符。/id/pid


推荐阅读