Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gestion des index secondaires globaux dans DynamoDB
Cette section décrit comment créer, modifier et supprimer des index secondaires globaux dans Amazon DynamoDB.
Rubriques
Création d'une table avec des index secondaires globaux
Pour créer une table avec un ou plusieurs index secondaires globaux, utilisez l'opération CreateTable
avec le paramètre GlobalSecondaryIndexes
. Pour bénéficier d'une flexibilité de requête maximum, vous pouvez créer jusqu'à 20 index secondaires globaux (quota par défaut) par table.
Vous devez spécifier un attribut faisant office de clé de partition d'index. Vous pouvez éventuellement spécifier un autre attribut pour la clé de tri d'index. Il n'est pas nécessaire que l'un de ces attributs de clé soit identique à un attribut de clé dans la table. Par exemple, dans le GameScorestableau (voirUtilisation d'index secondaires globaux dans DynamoDB), il n'TopScoreDateTime
y a TopScore
pas non plus d'attributs clés. Vous pouvez créer un index secondaire global avec une clé de partition TopScore
et une clé de tri TopScoreDateTime
. Vous pouvez utiliser un tel index pour déterminer s'il existe une corrélation entre les scores d'une partie et l'heure de la journée à laquelle celle-ci est jouée.
Chaque attribut de clé d'index doit être un scalaire de type String
, Number
ou Binary
(il ne peut pas être de type document ou ensemble). Vous pouvez projeter des attributs de tout type de données dans un index secondaire global. Celui-ci inclut des scalaires, des documents et des ensembles. Pour obtenir la liste complète des types de données, consultez Types de données.
Si vous utilisez le mode approvisionné, vous devez fournir les paramètres ProvisionedThroughput
pour l'index, à savoir ReadCapacityUnits
et WriteCapacityUnits
. Ces paramètres de débit approvisionné sont distincts de ceux de la table, mais se comportent de la même manière. Pour de plus amples informations, veuillez consulter Considérations sur le débit alloué pour les index secondaires globaux.
Les index secondaires globaux héritent du mode de capacité en lecture/écriture de la table de base. Pour de plus amples informations, veuillez consulter Considérations relatives au changement de mode de capacité dans DynamoDB.
Note
Les opérations de remplissage et les opérations d'écriture en cours partagent le débit d'écriture au sein de l'index secondaire global. Lors de la création d'un nouveauGSI, il peut être important de vérifier si votre choix de clé de partition entraîne une distribution inégale ou étroite des données ou du trafic entre les valeurs des clés de partition du nouvel index. Si cela se produit, vous pourriez voir des opérations de remplissage et d'écriture se produire en même temps et limiter les écritures dans la table de base. Le service prend des mesures pour minimiser l'éventualité de ce scénario, mais il n'a aucune idée de la forme des données client par rapport à la clé de partition d'index, à la projection choisie ou à la rareté de la clé primaire d'index.
Si vous pensez que votre nouvel index secondaire global peut présenter des données ou une distribution de trafic étroites ou asymétriques entre les valeurs des clés de partition, tenez compte des points suivants avant d'ajouter de nouveaux index à des tables importantes sur le plan opérationnel.
-
Il peut être plus sûr d'ajouter l'index au moment où votre application génère le moins de trafic.
-
Envisagez d'activer CloudWatch Contributor Insights sur votre table de base et vos index. Cela vous procurera des informations précieuses sur la distribution de votre trafic.
-
Pour les tables de base et les index du mode capacité allouée, définissez la capacité d'écriture allouée de votre nouvel index sur au moins le double de celle de votre table de base. Surveillez
WriteThrottleEvents
,ThrottledRequests
OnlineIndexPercentageProgress
,OnlineIndexConsumedWriteCapacity
etOnlineIndexThrottleEvents
CloudWatch mesurez tout au long du processus. Ajustez la capacité d'écriture allouée au besoin pour achever le remplissage dans un délai raisonnable sans aucun effet de limitation significatif sur vos opérations en cours. -
Préparez-vous à annuler la création de l'index si vous subissez un impact opérationnel dû à la limitation des écritures et si l'augmentation de la capacité d'écriture allouée dans votre nouvel index GSI ne résout pas le problème.
Description des index secondaires globaux sur une table
Pour afficher l'état de tous les index secondaires globaux sur une table, utilisez l'opération DescribeTable
. La portion GlobalSecondaryIndexes
de la réponse affiche tous les index sur la table, ainsi que l'état actuel de chacun d'eux (IndexStatus
).
L'état IndexStatus
d'un index secondaire global peut être l'un des suivants :
-
CREATING
– L'index est en cours de création et n'est pas encore disponible pour utilisation. -
ACTIVE
– L'index est prêt pour utilisation et les applications peuvent effectuer des opérationsQuery
dessus. -
UPDATING
– Les paramètres de débit approvisionné de l'index sont en cours de modification. -
DELETING
– L'index est actuellement en cours de suppression et ne peut plus être utilisé.
Quand DynamoDB a fini de générer un index secondaire global, l'état de celui-ci passe de CREATING
à ACTIVE
.
Ajout d'un index secondaire global à une table existante
Pour ajouter un index secondaire global à une table existante, utilisez l'opération UpdateTable
avec le paramètre GlobalSecondaryIndexUpdates
. Vous devez fournir les informations suivantes :
-
Un nom d'index. Le nom doit être unique parmi tous les index sur cette table.
-
Le schéma de clé de l'index. Vous devez spécifier un attribut pour la clé de partition d'index. Vous pouvez éventuellement spécifier un autre attribut pour la clé de tri d'index. Il n'est pas nécessaire que l'un de ces attributs de clé soit identique à un attribut de clé dans la table. Les types de données pour chaque attribut de schéma doivent être scalaires :
String
,Number
ouBinary
. -
Attributs à projeter à partir de la table dans l'index :
-
KEYS_ONLY
– Chaque élément de l'index se compose uniquement des valeurs de clé de partition et de tri de la table, ainsi que des valeurs de clé d'index. -
INCLUDE
– En plus des attributs décrits dansKEYS_ONLY
, l'index secondaire inclut des attributs autres que de clé que vous spécifiez. -
ALL
– L'index inclut tous les attributs de la table source.
-
-
Les paramètres de débit approvisionné pour l'index, à savoir
ReadCapacityUnits
etWriteCapacityUnits
. Ces paramètres de débit approvisionné sont distincts de ceux de la table.
Vous ne pouvez créer qu'un seul index secondaire global par opération UpdateTable
.
Phases de création d'index
Lorsque vous ajoutez un nouvel index secondaire global à une table existante, la table reste disponible pendant la création de l'index. Toutefois, le nouvel index n'est pas disponible pour les opérations Query tant que son état n'est pas passé de CREATING
à ACTIVE
.
Note
La création d'un index secondaire global n'utilise pas la scalabilité automatique des applications. L'augmentation de la capacité de scalabilité automatique des applications MIN
ne réduit pas le temps de création de l'index secondaire global.
En coulisses, DynamoDB génère l'index en deux phases :
- Allocation de ressources
-
DynamoDB alloue les ressources de calcul et de stockage nécessaires à la génération de l'index.
Au cours de la phase d'allocation des ressources, l'attribut
IndexStatus
estCREATING
, et l'attributBackfilling
a la valeur false. Utilisez l'opérationDescribeTable
pour récupérer l'état d'une table et de tous ses index secondaires.Pendant que l'index est en phase d'allocation de ressources, vous ne pouvez pas supprimer l'index ou sa table parent. Vous ne pouvez pas non plus modifier le débit approvisionné de l'index ou de la table. Vous ne pouvez pas ajouter ou supprimer d'autres index sur la table. En revanche, vous pouvez modifier le débit approvisionné de ces autres index.
- Remplissage
-
Pour chaque élément de la table, DynamoDB détermine l'ensemble d'attributs à écrire dans l'index en fonction de sa projection (
KEYS_ONLY
,INCLUDE
ouALL
). Il écrit ensuite ces attributs dans l'index. Durant la phase de remplissage, DynamoDB suit les éléments ajoutés, supprimés ou mis à jour dans la table. Les attributs de ces éléments sont également ajoutés, supprimés ou mis à jour dans l'index, selon le cas.Au cours de la phase de remplissage, l'attribut
IndexStatus
est défini surCREATING
, et l'attributBackfilling
a la valeur true. Utilisez l'opérationDescribeTable
pour récupérer l'état d'une table et de tous ses index secondaires.Pendant le remplissage de l'index, vous ne pouvez pas supprimer sa table parent. Vous pouvez cependant toujours supprimer l'index ou modifier le débit approvisionné de la table et de n'importe lequel de ses index secondaires globaux.
Note
Pendant la phase de remplissage, certaines écritures d'éléments violant le schéma de clé peuvent aboutir tandis que d'autres sont rejetées. Après le remplissage, toutes les écritures dans les éléments, qui violent le schéma de clé du nouvel index sont rejetées. Nous vous recommandons d'exécuter l'outil de détection des violations une fois la phase de remplissage terminée afin de détecter et résoudre d'éventuelles violations de clé. Pour de plus amples informations, veuillez consulter Détection et correction des violations des clés d'index dans DynamoDB.
Pendant les phases d'allocation de ressources et de remplissage, l'index est dans l'état CREATING
. Pendant ce temps, DynamoDB effectue des opérations de lecture sur la table. Vous n'êtes pas facturé pour les opérations de lecture de la table de base destinées au remplissage de l'index secondaire global. En revanche, vous êtes facturé pour les opérations d'écriture destinées au remplissage de l'index secondaire global nouvellement créé.
Une fois la génération de l'index terminée, l'état passe à ACTIVE
. Vous ne pouvez pas effectuer d'opération Query
ou Scan
sur l'index tant que l'état de celui-ci n'est pas ACTIVE
.
Note
Dans certains cas, DynamoDB ne peut pas écrire des données de la table dans l'index en raison de violations de clé d'index. Cela peut se produire si :
-
Le type de données d'une valeur d'attribut ne correspond pas au type de données d'un type de données de schéma de clé d'index.
-
La taille d'un attribut dépasse la longueur maximale définie pour un attribut de clé d'index.
-
Un attribut de clé d'index a une valeur de String ou de Binary attribute vide.
Les violations de clé d'index n'interfèrent pas avec la création d'index secondaire global. Cependant, quand l'index passe à l'état ACTIVE
, il ne contient plus de clé violant le schéma de clé.
DynamoDB fournit un outil autonome pour détecter et résoudre ces problèmes. Pour de plus amples informations, veuillez consulter Détection et correction des violations des clés d'index dans DynamoDB.
Ajout d'un index secondaire global à une table volumineuse
Le temps nécessaire à la génération d'un index secondaire global dépend de plusieurs facteurs, tels que les suivants :
-
La taille de la table
-
Le nombre d'éléments dans la table pouvant être inclus dans l'index
-
Le nombre d'attributs projetés dans l'index
-
La capacité d'écriture approvisionnée de l'index
-
L'activité d'écriture sur la table principale pendant les générations d'index
Si vous ajoutez un index secondaire global à une table très volumineuse, le processus de création peut prendre beaucoup de temps. Pour suivre la progression et déterminer si la capacité d'écriture de l'index est suffisante, consultez les CloudWatch statistiques Amazon suivantes :
-
OnlineIndexPercentageProgress
-
OnlineIndexConsumedWriteCapacity
-
OnlineIndexThrottleEvents
Pour plus d'informations sur CloudWatch les métriques associées à DynamoDB, consultez. Métriques DynamoDB
Important
Vous devrez peut-être autoriser la mise en liste de très grandes tables avant de créer ou de mettre à jour un index secondaire global. Contactez le AWS Support pour autoriser la mise en liste de vos tables.
Si le paramètre de débit d'écriture approvisionné sur l'index est trop bas, la génération d'index prend plus de temps. Pour réduire le temps de génération d'un nouvel index secondaire global, vous pouvez augmenter temporairement sa capacité d'écriture approvisionnée.
Note
En règle générale, nous vous recommandons de définir la capacité d'écriture approvisionnée de l'index sur 1,5 fois la capacité d'écriture de la table. Ce paramétrage convient pour de nombreux cas d'utilisation. Toutefois, vos besoins réels peuvent être plus élevés ou plus bas.
Pendant le remplissage d'un index, DynamoDB utilise la capacité système interne pour lire la table. Cela permet de minimiser l'impact de la création d'index et de s'assurer que la table ne manque pas de capacité de lecture.
Toutefois, il est possible que le volume de l'activité d'écriture entrante dépasse la capacité d'écriture approvisionnée de l'index. Il s'agit d'un scénario de goulot d'étranglement, dans lequel la création d'index prend plus de temps en raison de la limitation de l'activité d'écriture dans l'index. Lors de la création de l'index, nous vous recommandons de surveiller les CloudWatch métriques Amazon relatives à l'index afin de déterminer si la capacité d'écriture consommée dépasse la capacité allouée. Dans un scénario goulot d'étranglement, vous devez augmenter la capacité d'écriture approvisionnée sur l'index pour éviter une limitation d'écriture pendant la phase de remplissage.
Une fois l'index créé, vous devez définir sa capacité d'écriture approvisionnée pour refléter l'utilisation normale de votre application.
Suppression d'un index secondaire global
Si vous n'avez plus besoin d'un index secondaire global, vous pouvez le supprimer à l'aide de l'opération UpdateTable
.
Vous ne pouvez supprimer qu'un seul index secondaire global par opération UpdateTable
.
Le processus de suppression de l'index secondaire global n'a aucune incidence sur les activités de lecture ou d'écriture dans la table parent. Pendant la suppression, vous pouvez toujours modifier le débit approvisionné sur d'autres index.
Note
-
Lorsque vous supprimez une table à l'aide de l'action
DeleteTable
, tous les index secondaires globaux sur cette table sont également supprimés. -
Votre compte ne sera pas facturé pour l'opération de suppression de l'index secondaire global.
Modification d'un index secondaire global pendant la création
Pendant la génération d'un index, vous pouvez utiliser l'opération DescribeTable
pour déterminer la phase en cours. La description de l'index inclut un attribut booléen, Backfilling
, indiquant si DynamoDB est en train de charger l'index avec les éléments de la table. Si la valeur de Backfilling
est true, la phase d'allocation de ressources est terminée et le remplissage de l'index est en cours.
Pendant le remplissage, vous pouvez mettre à jour les paramètres de débit approvisionné pour l'index. Vous pourriez accélérer la génération de l'index en augmentant la capacité d'écriture de l'index pendant la génération de celui-ci, et en la réduisant par la suite. Pour modifier les paramètres de débit approvisionné de l'index, utilisez l'opération UpdateTable
. L'état de l'index passe à UPDATING
, et Backfilling
a la valeur true jusqu'à ce que l'index soit prêt pour utilisation.
Pendant la phase de remplissage, vous pouvez supprimer l'index en cours de création. Au cours de cette phase, vous ne pouvez pas ajouter ou supprimer d'autres index sur la table.
Note
Pour les index créés dans le cadre d'une opération CreateTable
, l'attribut Backfilling
n'apparaît pas dans la sortie DescribeTable
. Pour de plus amples informations, veuillez consulter Phases de création d'index.