Je souhaite créer des index secondaires globaux (GSI) pour une table Amazon DynamoDB, mais cela prend beaucoup de temps.
Brève description
Lorsque vous ajoutez un nouvel index secondaire global à une table existante, le champ IndexStatus est défini sur CREATING (CRÉATION EN COURS) et le champ Backfilling (Remplissage) sur true (vrai). Le remplissage permet de lire les éléments de la table et de déterminer s'ils peuvent être ajoutés à l'index. Lorsque vous remplissez un index, DynamoDB utilise la capacité interne du système pour lire les éléments de la table. Cela minimise l'effet de la création d'index et garantit que la table ne manque pas de capacité de lecture.
Le temps nécessaire à la création d'un indice secondaire global dépend de plusieurs facteurs :
- La taille de la table de base
- le nombre d'éléments de la table pouvant être inclus dans l'index ;
- le nombre d'attributs projetés dans l'index ;
- la capacité d'écriture allouée de l'index ;
- l'activité d'écriture sur la table de base lors de la création de l'index ;
- la distribution des données entre les partitions d'index.
Pour accélérer le processus de création, augmentez le nombre d'unités de capacité d'écriture (WCU) sur l'index.
Les index secondaires globaux héritent du mode de capacité de lecture ou d'écriture de la table de base. Si votre table est en mode à la demande, DynamoDB crée également l'index avec ce mode. Dans ce cas, vous ne pouvez pas augmenter la capacité de l'index car une table DynamoDB à la demande s'adapte elle-même en fonction du trafic entrant.
Solution
Utilisez la métrique Amazon CloudWatch OnlineIndexPercentageProgress pour surveiller la progression de la création de l'index :
1. Ouvrez la console DynamoDB.
2. Dans le volet de navigation, cliquez sur Tables, puis sélectionnez votre table dans la liste.
3. Sélectionnez l'onglet Metrics (Métriques).
4. Sélectionnez View all CloudWatch metrics (Afficher toutes les métriques CloudWatch).
5. Saisissez OnlineIndexPercentageProgress dans la zone de recherche.
Remarque : si la recherche ne donne aucun résultat, patientez environ une minute pour que les métriques soient renseignées. Ensuite, réessayez.
6. Sélectionnez le nom de l'index dont vous souhaitez voir la progression.
Déterminez le nombre d'unités de capacité d'écriture (WCU) supplémentaires dont vous avez besoin. Pour ce faire, divisez la taille de la table en kilo-octets par le temps de remplissage souhaité. Consultez les exemples suivants de ce calcul.
Exemple 1
Supposons que vous disposiez d'une table de 1 Gio (1 074 000 Ko). Vous souhaitez que le processus de remplissage se termine en dix minutes (600 secondes). Par conséquent, calculez le nombre de WCU comme suit :
1 074 000/600 = 1 790 WCU
Exemple 2
Supposons que vous souhaitiez que la taille de l'index soit de 2 Go et que la création de l'index soit terminée en une heure. Par conséquent, calculez le nombre de WCU comme suit :
(2 Go x 1024 x 1024) Ko/60 minutes/60 secondes = ~583 WCU
Le nombre requis de WCU dépend de la taille de l'indice et du temps que vous estimez.
Remarque : il ne s'agit que d'une estimation. Le délai de création dépend de plusieurs facteurs, tels que la distribution des clés, la taille des éléments et le nombre d'attributs projetés dans l'index.
Afin d'allouer une capacité d'écriture supplémentaire, procédez comme suit :
1. Ouvrez la console DynamoDB.
2. Dans le volet de navigation, cliquez sur Tables, puis sélectionnez votre table dans la liste.
3. Sélectionnez l'onglet Capacity (Capacité).
4. Augmentez la capacité d'écriture de l'index, puis cliquez sur Save (Enregistrer).
5. Après environ une minute, vérifiez la métrique OnlineIndexPercentageProgress pour voir si la vitesse de création est améliorée.
Remarque : l'allocation de capacité de lecture supplémentaire n'est pas nécessaire.
Informations connexes
Amélioration de l'accès aux données avec les index secondaires
Ajout d'un index secondaire global à une table existante
Gestion des index secondaires globaux