Améliorer les performances à l’aide de partitions de stockage lors de l’accès aux données d’entité
Une clé de partition facultative peut être spécifiée pour créer une partition logique pour les données d’entité personnalisées non relationnelles stockées dans les tables NoSql du stockage hétérogène Azure (Azure Cosmos DB). Le fait d’avoir une clé de partition améliore les performances de l’application pour de grands ensembles de données (des millions d’enregistrements) en regroupant les éléments de données en ensembles logiques dans une table. Par exemple, un tableau contenant des produits peut être regroupé logiquement en catégories de produits pour améliorer la récupération de tous les articles d’une catégorie de produits. La valeur de la clé de partition peut être une chaîne ou un type numérique. Une fois spécifiée, la valeur de la clé de partition ne peut pas être modifiée.
Lorsqu’aucune clé de partition n’est spécifiée, la table est la limite logique et la récupération d’un élément unique ou d’un ensemble d’éléments liés logiquement à partir d’un grand jeu de données ne sera pas aussi performante que lors de l’utilisation d’une clé de partition.
Créer et accéder à une partition
Une nouvelle valeur de clé de partition unique doit être utilisée pour créer une nouvelle partition logique. La même valeur doit être utilisée pour créer des éléments supplémentaires dans la même partition logique et pour récupérer, mettre à jour ou supprimer des éléments appartenant à cette partition logique.
public void Run(CrmServiceClient client)
{
// Create
Entity entity = new Entity("new_msdyn_customer");
entity["new_firstname"] = "Monica";
entity["new_lastname"] = "Thompson";
// First use of the partition ID value during an entity Create operation
// also creates the partition where that entity record is stored.
entity["partitionid"] = "CustomerPartition";
Guid id = client.Create(entity);
// Update
UpdateRequest updateRequest = new UpdateRequest();
entity = new Entity("new_msdyn_customer", id);
entity["new_firstname"] = "Cora";
//entity["new_lastname"] = "Thomas";
entity["partitionid"] = "CustomerPartition";
updateRequest.Target = entity;
var updateResponse = (UpdateResponse)client.Execute(updateRequest);
// Retrieve
RetrieveRequest request = new RetrieveRequest();
request.ColumnSet = new ColumnSet("new_firstname");
request.Target = new EntityReference("new_msdyn_customer", id);
request["partitionId"] = "CustomerPartition";
var response = (RetrieveResponse)client.Execute(request);
// RetrieveMultiple
RetrieveMultipleRequest retreiveMultipleRequest = new RetrieveMultipleRequest();
retreiveMultipleRequest.Query = new QueryExpression()
{
EntityName = "new_msdyn_customer",
ColumnSet = new ColumnSet("new_firstname")
};
retreiveMultipleRequest["partitionId"] = "CustomerPartition";
var retrieveResponse = (RetrieveMultipleResponse)client.Execute(retreiveMultipleRequest);
// Update and insert
UpsertRequest upsertRequest = new UpsertRequest();
entity = new Entity("new_msdyn_customer", id);
entity["new_firstname"] = "Andre";
entity["new_lastname"] = "Lawson";
entity["partitionid"] = "CustomerPartition";
upsertRequest.Target = entity;
var upsertResponse = (UpsertResponse)client.Execute(upsertRequest);
// Delete
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.Target = new EntityReference("new_msdyn_customer", id);
deleteRequest["partitionId"] = "CustomerPartition";
var deleteResponse = (DeleteResponse)client.Execute(deleteRequest);
}
Informations supplémentaires
Voici quelques détails supplémentaires sur la clé de partition et la gestion des partitions.
- La valeur de clé doit être unique dans l’environnement.
- Une partition est limitée à 20 Go de données et aucune méthode n’est disponible pour vérifier la taille actuelle de la partition.
- Il n’y a pas de limite définie pour le nombre de partitions que vous pouvez allouer dans un environnement.
- L’allocation de partition est automatique. La spécification d’une clé de partition unique lors d’une opération de création crée une partition. Lorsque toutes les données ont été supprimées de la partition, la partition est automatiquement supprimée.
- Aucune méthode n’est disponible pour renommer une clé.
- Actuellement, seules les opérations d’entité Créer, Mettre à jour, Récupérer et Supprimer prennent en charge le partitionnement du stockage.
Voir aussi
Transmisson de paramètres facultatifs avec une requête
Créer des entités à l’aide du service d’organisation
Récupérer une entité à l’aide du service d’organisation
Mettre à jour et supprimer des entités à l’aide du service Organisation
Partitionnement et mise à l’échelle horizontale dans Azure Cosmos DB