azure-cosmosdb - 在 CosmosDB SQLAPI 中选择正确的分区键的问题
问题描述
我正在使用 Azure 数据工厂将所需数据从数据湖复制到 cosmos db。
在复制 100 个样本时,我看到运行在大约 5 分钟内完成。在复制 100 万个样本时,我看到运行在大约 1 小时内完成。
我为 cosmos db 容器设置的吞吐量约为 2000 RU/s。我只使用 1 个容器。
基于此文档:https ://docs.microsoft.com/en-us/azure/cosmos-db/partitioning-overview#choose-partitionkey
我已将分区键设置为 /PersonnelNumber(数据中有大约 100 万个唯一的 PersonnelNumber 值)。您能帮我了解这是否是正确的分区键吗?还是导致运行速度变慢?
这两点令人困惑 - 分区键应该:
成为具有不变值的属性。如果某个属性是您的分区键,则您无法更新该属性的值。具有高基数。换句话说,该属性应该具有广泛的可能值。谢谢!
解决方案
文档中没有“PersonnelNumber”。相反,您有“Person.PersonnelNumber”字段。因此,Cosmos DB 无法在文档中找到“PersonnelNumber”,因此它使用空值填充“PersonnelNumber”的分区字段。
将字段名称从“Person.PersonnelNumber”更改为“PersonnelNumber”,然后上传。
如果每个分区键都有唯一的值,那么它有利于写入。在您的情况下, PersonnelNumber 是写入吞吐量的良好分区键,因为它具有唯一值。但是,您将无法更新 PersonnelNumber。
推荐阅读
- python - 熊猫连接列
- java - `InputStream` 和 `Reader` 本质上是一样的吗? `OutputStream` 和 `Writer` 本质上是一样的吗?
- mysql - 如何从表中删除而不必删除约束
- python - 如何在 postgresql3 中将 NULL 插入具有时间戳类型的列中
- javascript - 我是否需要 react-redux 的数据库才能存储用户?
- laravel-5 - 从 isDirty Laravel 中排除属性
- python - Python如何在多个脚本中使用字符串
- node.js - 如果变量在标题中,则 Slack Dialog.open 不会打开
- spring-boot - 如何从包含多个 repo 的配置服务器中获取属性
- c# - 字符串表达式到 c# 函数委托