Partitionnement et mise à l’échelle horizontale dans Azure Cosmos DBPartitioning and horizontal scaling in Azure Cosmos DB

Cet article explique la relation entre les partitions logiques et physiques.This article explains the relationship between logical and physical partitions. Il présente également les bonnes pratiques pour le partitionnement et donne une vue détaillée du fonctionnement de la mise à l’échelle horizontale dans Azure Cosmos DB.It also discusses best practices for partitioning and gives an in-depth view at how horizontal scaling works in Azure Cosmos DB. Il n’est pas nécessaire de comprendre ces détails internes pour sélectionner votre clé de partition, mais nous les avons abordés afin que vous compreniez bien comment Azure Cosmos DB fonctionne.It's not necessary to understand these internal details to select your partition key but we have covered them so you have clarity for how Azure Cosmos DB works.

Partitions logiquesLogical partitions

Une partition logique est constituée d’un ensemble d’éléments dotés de la même clé de partition.A logical partition consists of a set of items that have the same partition key. Par exemple, dans un conteneur qui contient des données sur la nutrition, tous les éléments contiennent une propriété foodGroup.For example, in a container that contains data about food nutrition, all items contain a foodGroup property. Vous pouvez utiliser foodGroup comme clé de partition pour le conteneur.You can use foodGroup as the partition key for the container. Des groupes d’éléments ayant des valeurs spécifiques pour foodGroup, telles que Beef Products, Baked Products et Sausages and Luncheon Meats, forment des partitions logiques distinctes.Groups of items that have specific values for foodGroup, such as Beef Products,Baked Products, and Sausages and Luncheon Meats, form distinct logical partitions. Vous n’avez pas à vous soucier de la suppression d’une partition logique quand les données sous-jacentes sont supprimées.You don't have to worry about deleting a logical partition when the underlying data is deleted.

Une partition logique définit également la portée des transactions de base de données.A logical partition also defines the scope of database transactions. Vous pouvez mettre à jour les éléments d’une partition logique via une transaction avec isolement de capture instantanée.You can update items within a logical partition by using a transaction with snapshot isolation. Lorsque de nouveaux éléments sont ajoutés à un conteneur, de nouvelles partitions logiques sont créées de façon transparente par le système.When new items are added to a container, new logical partitions are transparently created by the system.

Il n’existe aucune limite au nombre de partitions logiques dans votre conteneur.There is no limit to the number of logical partitions in your container. Chaque partition logique peut stocker jusqu’à 20 Go de données.Each logical partition can store up to 20GB of data. Les bons choix de clé de partition procurent une large gamme de valeurs possibles.Good partition key choices have a wide range of possible values. Par exemple, dans un conteneur dont tous les éléments contiennent une propriété foodGroup, les données de la partition logique Beef Products peuvent croître jusqu’à 20 Go.For example, in a container where all items contain a foodGroupproperty, the data within the Beef Products logical partition can grow up to 20GB. La sélection d’une clé de partition avec une large gamme de valeurs possibles garantit que le conteneur peut être mis à l’échelle.Selecting a partition key with a wide range of possible values ensures that the container is able to scale.

Partitions physiquesPhysical partitions

Un conteneur Azure Cosmos est mis à l’échelle en répartissant les données et le débit sur des partitions physiques.An Azure Cosmos container is scaled by distributing data and throughput across physical partitions. En interne, une ou plusieurs partitions logiques sont mappées à une seule partition physique.Internally, one or more logical partitions are mapped to a single physical partition. La plupart des petits conteneurs Cosmos ont de nombreuses partitions logiques, mais ne nécessitent qu’une seule partition physique.Most small Cosmos containers have many logical partitions but only require a single physical partition. Contrairement aux partitions logiques, les partitions physiques sont une implémentation interne du système et sont entièrement gérées par Azure Cosmos DB.Unlike logical partitions, physical partitions are an internal implementation of the system and they are entirely managed by Azure Cosmos DB.

Le nombre de partitions physiques dans votre conteneur Cosmos dépend des éléments suivants :The number of physical partitions in your Cosmos container depends on the following:

  • Quantité de débit provisionné (chaque partition physique peut fournir un débit allant jusqu’à 10 000 unités de requête par seconde)Amount of provisioned throughput (each individual physical partition can provide a throughput of up to 10,000 request units per second)
  • Stockage des données total (chaque partition physique peut stocker jusqu’à 50 Go)Total data storage (each individual physical partition can store up to 50GB)

Il n’existe aucune limite au nombre total de partitions physiques dans votre conteneur.There is no limit to the total number of physical partitions in your container. À mesure qu’augmente la taille des données ou du débit provisionné, Azure Cosmos DB crée automatiquement des partitions physiques en divisant celles qui existent déjà.As your provisioned throughput or data size grows, Azure Cosmos DB will automatically create new physical partitions by splitting existing ones. Les divisions des partitions physiques n’impactent pas la disponibilité de votre application.Physical partition splits do not impact your application's availability. Après la division des partitions physiques, toutes les données d’une seule partition logique sont toujours stockées sur la même partition physique.After the physical partition split, all data within a single logical partition will still be stored on the same physical partition. La division d’une partition physique crée simplement un mappage de partitions logiques sur des partitions physiques.A physical partition split simply creates a new mapping of logical partitions to physical partitions.

Le débit approvisionné pour un conteneur est uniformément réparti entre les partitions physiques.Throughput provisioned for a container is divided evenly among physical partitions. Une conception de clé de partition qui ne distribue pas les requêtes de débit de manière uniforme peut créer des partitions « à chaud ».A partition key design that doesn't distribute the throughput requests evenly might create "hot" partitions. Les partitions à chaud peuvent entraîner une limitation du débit, une utilisation inefficace du débit approvisionné et des coûts plus élevés.Hot partitions might result in rate-limiting and in inefficient use of the provisioned throughput, and higher costs.

Vous pouvez voir les partitions physiques de votre conteneur dans la section Stockage du panneau Métriques du portail Azure :You can see your container's physical partitions in the Storage section of the Metrics blade of the Azure portal:

Affichage du nombre de partitions physiques Viewing number of physical partitions

Dans cet exemple de conteneur où nous avons choisi /foodGroup comme clé de partition, chacun des trois rectangles représente une partition physique.In this example container where we have chosen /foodGroup as our partition key, each of the three rectangles represents a physical partition. Dans l’image, la plage de clés de partition est identique à une partition physique.In the image, partition key range is the same as a physical partition. La partition physique sélectionnée contient trois partitions logiques : Beef Products, Vegetable and Vegetable Products et Soups, Sauces, and Gravies.The selected physical partition contains three logical partitions: Beef Products, Vegetable and Vegetable Products, and Soups, Sauces, and Gravies.

Si nous provisionnons un débit de 18 000 unités de requête par seconde (RU/s), chacune des trois partitions physiques peut utiliser 1/3 du débit total provisionné.If we provision a throughput of 18,000 request units per second (RU/s), then each of the three physical partition can utilize 1/3 of the total provisioned throughput. Au sein de la partition physique sélectionnée, les clés de partition logique Beef Products, Vegetable and Vegetable Products et Soups, Sauces, and Gravies peuvent, collectivement, utiliser les 6 000  RU/s provisionnées de la partition physique.Within the selected physical partition, the logical partition keys Beef Products, Vegetable and Vegetable Products, and Soups, Sauces, and Gravies can, collectively, utilize the physical partition's 6,000 provisioned RU/s. Le débit provisionné étant réparti uniformément entre les partitions physiques de votre conteneur, il est important de choisir une clé de partition qui répartit uniformément la consommation du débit en choisissant la clé de partition logique appropriée.Because provisioned throughput is evenly divided across your container's physical partitions, it's important to choose a partition key that evenly distributes throughput consumption by choosing the right logical partition key. Si vous choisissez une clé de partition qui répartit uniformément la consommation du débit entre les partitions logiques, vous vous assurez que la consommation du débit sur les partitions physiques est équilibrée.If you choose a partition key that evenly distributes throughput consumption across logical partitions, you will ensure that throughput consumption across physical partitions is balanced.

Jeux de réplicasReplica sets

Chaque partition physique se compose d’un ensemble de réplicas, également appelé jeu de réplicas.Each physical partition consists of a set of replicas, also referred to as a replica set. Chaque jeu de réplicas héberge une instance du moteur de base de données Azure Cosmos.Each replica set hosts an instance of the Azure Cosmos database engine. Grâce au jeu de réplicas, les données stockées dans la partition physique sont durables, hautement disponibles et cohérentes.A replica set makes the data stored within the physical partition durable, highly available, and consistent. Chaque réplica qui constitue la partition physique hérite du quota de stockage de la partition.Each replica that makes up the physical partition inherits the partition's storage quota. Tous les réplicas d’une partition physique prennent collectivement en charge le débit alloué à la partition physique.All replicas of a physical partition collectively support the throughput that's allocated to the physical partition. Azure Cosmos DB gère automatiquement les jeux de réplicas.Azure Cosmos DB automatically manages replica sets.

La plupart des petits conteneurs Cosmos nécessitent uniquement une seule partition physique, mais ils ont toujours au moins 4 réplicas.Most small Cosmos containers only require a single physical partition but will still have at least 4 replicas.

L’illustration suivante montre comment les partitions logiques sont mappées sur des partitions physiques mondialement distribuées :The following image shows how logical partitions are mapped to physical partitions that are distributed globally:

Image illustrant le partitionnement dans Azure Cosmos DB

Étapes suivantesNext steps