azure-cosmosdb - 如何判断 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 个字符的基数很低. 我怀疑将需要迁移到启用了大分区键设置的容器,或者更激烈的事情。:(
解决方案
检测分区键类型
可以在导出的 ARM 模板中看到分区键类型 - 大键的版本为“2”:
"partitionKey": {
"paths": [
"/id"
],
"kind": "Hash",
"version": 2
}
分区键哈希
我在这里做了一些实验。我创建了一个带有版本 1 哈希和分区键的集合/pid
。
有了这个,我创建了一个> /pid
100 个字符和一个/id
.1
我无法/pid
在. 当我在第 100 个字符中出现差异时,就可以了。所以我相当肯定编码是 UTF8,因为我使用的是 ASCII 范围内的字符。/id
/pid
推荐阅读
- c - float *a[]; 是什么意思?在 c 中声明?
- php - PHP 中的 foreach 在遍历数组时应该遵循的顺序是什么?
- sql - 如何在 SQL Server 上对任何列类型进行 MAX()
- python - 如何修复python中的for循环输出
- scala - 检查多个数组元素,如果都匹配则返回 true
- java - Tomcat不编译工作目录下的jsp
- r - R:模糊合并两个数据框
- angularjs - 如何在 ui-grid 单元格内使用带有文本输入的 get/set 方法
- php - CakePHP:无法通过 belongsTo 关联子项将数据保存到父实体
- linux - 在 Python 连接期间向 netcat 发送输入