Azure Cosmos DB表中查找表的分区键

时间:2020-01-04 00:47:28

标签: azure azure-cosmosdb azure-table-storage

我有一个非常简单的查询表,想从Azure函数调用。

模式非常简单: Name | Value 1 | Value 2

名称将是唯一的,但值1和值2将不是唯一的。查找表中没有其他数据。

对于Azure表,您需要一个分区键和一个行键。显然,行键将是Name字段。

我应该为分区密钥确切使用什么?

现在,我使用一个常量是因为不会有大量数据(最多可能是几百行),但是使用常量似乎有悖常理。

1 个答案:

答案 0 :(得分:2)

此答案适用于所有Cosmos DB容器,包括表。

何时将Cosmos DB容器存储在单个分区中(使用常量作为分区键)有意义?

  • 如果您确定容器的数据大小将始终保持在10GB以下。
  • 如果您确定容器的吞吐量要求始终保持在10,000 RU / s(RU /秒)以下。

如果以上条件之一为假,或者您不确定数据大小或吞吐量要求的未来增长,则可以根据以下准则使用分区键来扩展容器。

分区如何在Cosmos DB中工作

Cosmos根据分区键将容器项目分组为一组logical partitions。然后将这些逻辑分区映射到physical partitions。物理分区是构成基础数据库基础结构的计算/存储单元。

您可以通过选择分区键来确定如何将数据拆分为逻辑分区。您无法控制将逻辑分区映射到物理分区的方式,Cosmos可以自动透明地进行处理。

Cosmos允许容器在大量物理分区上分布,这使容器可以扩展到几乎无限的大小和吞吐量。

每个逻辑分区最多可以包含10GB的数据。未分区的容器的最大吞吐量为10,000 RU / s,这意味着每个逻辑分区限制为10,000 RU / s。

分配给您的容器的RU / s在托管该容器数据的所有物理分区中平均分配。例如,如果您的容器分配了4,000 RU / s,并且其逻辑分区分布在4个物理分区上,则每个物理分区将分配有1,000 RU / s,这也意味着,如果您的一个物理分区处于重负荷状态负载或“热”,它将获得速率限制为1,000 RU / s,而不是4,000。这就是为什么选择一个分区键来分散您的数据并均匀地跨分区访问数据非常重要的原因。

如果您的容器位于单个逻辑分区中,则它将始终映射到单个物理分区,并且容器的RU / s整个分配将始终可用。

所有Cosmos DB事务都限于单个逻辑分区,并且存储过程或触发器的执行也仅限于单个逻辑分区。

如何选择一个好的分区键

选择一个partition key,它将在逻辑分区之间平均分配您的数据,这将有助于确保数据在物理分区之间均匀地映射。这样可以防止“瓶颈”或“热”分区引起速率限制,并可能增加成本。

选择一个分区键,它将作为大部分查询的过滤条件。通过提供分区键作为查询的过滤器,Cosmos可以有效地将查询路由到正确的分区。如果未提供分区键,则会导致“扇出”查询,该查询将发送到所有分区,这会增加您的RU成本并可能会降低性能。如果您经常根据多个字段进行过滤,请参见this article以获得指导。

摘要

  • 在Cosmos DB中对容器进行分区的主要目的是允许容器在存储和吞吐量方面进行扩展。
  • 数据量或吞吐量要求不会显着增长的小型容器可以使用单个分区。
  • 大型容器,或预期在数据大小或吞吐量要求方面增长的容器,应使用精心选择的分区键进行分区。
  • 分区键的选择至关重要,可能会严重影响您的扩展能力,RU成本和查询性能。