如何为 Azure Cosmos DB 确定一个好的分区键

How to decide a good partition key for Azure Cosmos DB

我是 Azure Cosmos DB 的新手,但我想对以下内容有一个生动的了解:

  1. 分区键是什么?

目前我的理解比较浅->相同partition key的items会去同一个partition存储,这样在系统变大的时候可以更好的负载均衡。

  1. 如何选择一个好的分区键? 有人可以举个例子吗?

非常感谢!

1.What is the partition key?

在 azure cosmos db 中,有两个分区:physical partitionlogical partition

A.Physical 分区是固定数量的保留 SSD 支持存储与可变数量的计算资源相结合。

B.Logical 分区是物理分区中的一个分区,它存储与单个分区键值关联的所有数据。

我认为你提到的分区键是逻辑分区 key.The 分区键充当你的数据的逻辑分区,并为 Azure Cosmos DB 提供自然边界,用于跨物理 partitions.More 分布数据详情可以参考How does partitioning work.

2.How to decide a good partition key? Could somebody please provide an example?

您需要考虑选择一个 属性 名称,该名称具有广泛的值范围,甚至可以访问 patterns.An 理想的分区键是在您的查询中经常作为过滤器出现并且具有足够的分区键基数以确保您的解决方案具有可扩展性。

例如,您的数据有名为 id 和 color 的字段,您查询颜色作为过滤器更多 frequently.You 需要为分区键选择颜色而不是 id,这对您的查询性能更有效。因为每个项目都有不同的 id 但可能具有相同的 color.It 范围很广。此外,如果您添加颜色,分区键是可扩展的。

更多详情,请阅读Partition and scale in Azure Cosmos DB

希望对你有帮助。

您必须根据工作量选择分区。它们可以分为两类。

  • 重读
  • 重写

读取繁重的工作负载是读取的数据多于写入的数据,例如产品目录,目录的 insert/update 频率较低,浏览产品的人数较多。

写入繁重的工作负载是写入数据多于读取数据的工作负载。常见场景是物联网设备从多个传感器发送多个数据。您将向 Cosmos DB 写入大量数据,因为您可能每秒都在获取数据。

对于读取繁重的工作负载,选择分区键,其中 属性 用于 过滤器查询 。产品示例将是产品 ID,当用户想要阅读信息和浏览其评论时,它主要用于获取数据。

对于写入繁重的工作负载,选择分区键,其中属性更唯一。例如在IoT场景中,使用deviceid_signaldatetime这样的partition key,就是拼接发送信号的device-id,信号的DateTime更具有唯一性。