首页 > 解决方案 > 在 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 值)。您能帮我了解这是否是正确的分区键吗?还是导致运行速度变慢?

这两点令人困惑 - 分区键应该:

成为具有不变值的属性。如果某个属性是您的分区键,则您无法更新该属性的值。具有高基数。换句话说,该属性应该具有广泛的可能值。谢谢!

标签: azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


文档中没有“PersonnelNumber”。相反,您有“Person.PersonnelNumber”字段。因此,Cosmos DB 无法在文档中找到“PersonnelNumber”,因此它使用空值填充“PersonnelNumber”的分区字段。

将字段名称从“Person.PersonnelNumber”更改为“PersonnelNumber”,然后上传。

如果每个分区键都有唯一的值,那么它有利于写入。在您的情况下, PersonnelNumber 是写入吞吐量的良好分区键,因为它具有唯一值。但是,您将无法更新 PersonnelNumber。


推荐阅读