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

时间:2018-06-16 01:02:23

标签: azure-cosmosdb data-partitioning

我是Azure Cosmos DB的新手,但我希望能够生动地理解:

  1. 什么是分区键?
  2. 我现在的理解很浅 - >具有相同分区键的项目将转到同一分区进行存储,这可以在系统变大时更好地进行负载均衡。

    1. 如何确定好的分区键? 有人可以提供一个例子吗?
    2. 非常感谢!

2 个答案:

答案 0 :(得分:1)

  

1.什么是分区键?

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

A.物理分区是固定数量的保留SSD支持的存储,并结合可变数量的计算资源。

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

我认为您提到的分区键是逻辑分区键。分区键充当数据的逻辑分区,并为Azure Cosmos DB提供了跨物理分区分发数据的自然边界。更多详细信息,您可以参考How does partitioning work

  

2.如何确定一个好的分区键?有人可以提供一个例子吗?

您需要考虑选择具有多种值且甚至具有访问模式的属性名称。理想的分区键是在查询中经常显示为过滤器并且具有足够的基数以确保您的解决方案可扩展的键。

例如,您的数据包含名为id和color的字段,您可以更频繁地将颜色作为过滤器进行查询。您需要为分区键选择颜色而不是id,这对查询性能更有效。因为每个项目都有不同的id但可能颜色相同。它的范围很广。此外,如果添加颜色,则分区键可以扩展。

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

希望它对你有所帮助。

答案 1 :(得分:0)

您必须根据工作负载选择分区。它们可以分为两种。

  • 阅读繁重
  • 写沉重

读取繁重的工作量是指读取的数据要比写入的要多,例如产品目录,目录的插入/更新频率较小,浏览产品的人较多。

写入繁重的工作量是指写入的数据多于读取的工作量。常见方案是IoT设备从多个传感器发送多个数据。您将要向Cosmos DB写入大量数据,因为您可能每秒都会获取数据。

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

对于繁重的工作负载,请选择分区键,该属性的属性更加唯一。例如,在IoT场景中,使用诸如deviceid_signaldatetime之类的分区键来连接发送信号的设备ID,并且信号的DateTime具有更大的唯一性。