Azure Cosmos DB 中的分区和水平缩放

本文介绍 Azure Cosmos DB 中的物理分区和逻辑分区。 此外,介绍有关缩放和分区的最佳做法。

逻辑分区

逻辑分区由一组具有相同分区键的项构成。 例如,在所有项都包含一个 City 属性的容器中,可以使用 City 作为该容器的分区键。 具有特定 City 值(例如 LondonParisNYC)的项组构成了独立的逻辑分区。 删除基础数据时,无需担心是否会删除分区。

在 Azure Cosmos DB 中,容器是基本的缩放单元。 添加到容器的数据以及针对容器预配的吞吐量将自动在一组逻辑分区之间(水平)分区。 数据和吞吐量是根据为 Azure Cosmos DB 容器指定的分区键分区的。 有关详细信息,请参阅创建 Azure Cosmos DB 容器

逻辑分区定义数据库事务的范围。 可以使用支持快照隔离的事务来更新逻辑分区中的项。 当向容器中添加新项时,系统将透明地创建新的逻辑分区。

物理分区

通过将数据和吞吐量分配到大量逻辑分区上来缩放 Azure Cosmos DB 容器。 在内部,一个或多个逻辑分区将映射到由一组副本(也称为副本集)构成的物理分区。 每个副本集托管 Azure Cosmos DB 数据库引擎的一个实例。 副本集使物理分区中存储的数据具有持久性、高可用性和一致性。 物理分区支持最大数量的存储和请求单位 (RU)。 构成物理分区的每个副本均继承该分区的存储配额。 物理分区的所有副本共同支持分配给物理分区的吞吐量。

下图显示了逻辑分区如何映射到多区域分布的物理分区:

演示 Azure Cosmos DB 分区的插图

为容器预配的吞吐量在物理分区之间均匀划分。 不会均匀分配吞吐量请求的分区键设计可能会产生“热”分区。 热分区可能导致速率限制以及预配吞吐量的低效使用。

与逻辑分区不同,物理分区是系统的内部实现。 无法控制物理分区的大小、位置或计数,也无法控制逻辑分区与物理分区之间的映射。 但是,可以通过选择适当的分区键来控制逻辑分区的数目以及数据和吞吐量的分配。

后续步骤