Que fait cosmosdb-best-practices ?
Compétence d'agent 'cosmosdb-best-practices' de cline/skills.
Vue d'ensemble
Azure Cosmos DB est une base de données NoSQL distribuée globalement. Cette compétence résume les meilleures pratiques pour l'utiliser efficacement avec les SDK et API pris en charge.
Modélisation des données
- Clés de partition : Choisissez une clé de partition avec une cardinalité élevée (par exemple,
/userId,/deviceId) pour répartir uniformément la charge entre les partitions physiques. - Partitions logiques : Chaque partition logique ne doit pas dépasser 20 Go de stockage. Assurez-vous qu'aucune partition unique ne reçoive plus de 10 000 unités de requête par seconde (RU/s).
- Dénormalisation : Dans Cosmos DB (API NoSQL), privilégiez la dénormalisation des données (lire et écrire dans le même conteneur) plutôt que les jointures.
# Exemple : Dénormalisation d'un utilisateur et de ses commandes
{
"id": "user123",
"partitionKey": "user123",
"type": "user",
"name": "Jean Dupont",
"orders": [
{"orderId": "ord001", "total": 100.0, "status": "livré"}
]
}
Optimisation des requêtes
- Requêtes de point : Utilisez des requêtes de point (
ReadItemAsync) avec la clé de partition et l'ID pour une latence de lecture en millisecondes à un chiffre. - Index composés : Créez des index composés pour les clauses
ORDER BYsur plusieurs propriétés ou les filtres avec plusieurs conditions. - Flux de changement : Utilisez le flux de changement pour propager les mises à jour en temps réel à d'autres services (par exemple, Azure Functions, Azure Synapse Link).
// Requête de point efficace
ItemResponse<User> response = await container.ReadItemAsync<User>(
partitionKey: new PartitionKey("user123"),
id: "user123"
);
Configuration de l'indexation
- Indexation inclusive : Indexez uniquement les propriétés utilisées dans les requêtes. Par défaut, toutes les propriétés sont indexées - désactivez l'indexation pour les propriétés inutilisées.
- Indexation exclusive : Pour les modèles de données de type journal ou éphémères, définissez la politique d'indexation sur
Noneet ajoutez uniquement les chemins d'index nécessaires. - TTL (Time to Live) : Utilisez la fonction TTL sur les conteneurs ou les éléments pour nettoyer automatiquement les données obsolètes et réduire le coût de stockage.
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{"path": "/*"}
],
"excludedPaths": [
{"path": "/\"_etag\"/?"},
{"path": "/internalMetadata/*"}
]
}
Gestion des coûts
- Unités de requête (RU) : Surveillez la consommation de RU via les métriques Azure Monitor. Redimensionnez le débit provisionné (RU/s manuelles ou mises à l'échelle automatique) en fonction des modèles de charge.
- SDK v3 : Utilisez la dernière version du SDK .NET (v3) ou du SDK Java (v4) pour bénéficier des optimisations et des correctifs les plus récents.
Ressources supplémentaires
- Documentation officielle d'Azure Cosmos DB
- Exemples de meilleures pratiques
- Blog des performances de Cosmos DB
Cette compétence fait partie de la collection cline/skills.