Comment accélérer la création d'un index secondaire global pour une table DynamoDB ?

Dernière mise à jour : 24/06/2020

Je souhaite créer un index secondaire global (GSI) pour une table Amazon DynamoDB, mais cela prend beaucoup de temps. Comment puis-je accélérer le processus de création ?

Brève description

Lorsque vous ajoutez un nouvel index secondaire global à une table existante, l'attribut IndexStatus est défini sur CREATING et l'attribut Backfilling a la valeur true. « Backfilling », ou remplissage, désigne le processus de lecture des éléments de la table, permettant de déterminer s'ils peuvent être ajoutés à l'index. Le temps nécessaire à la création d'un index secondaire global dépend de plusieurs facteurs, notamment :

  • 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.

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, choisissez Tables, puis sélectionnez votre table dans la liste.
  3. Choisissez l'onglet Métriques.
  4. Choisissez Afficher toutes les métriques CloudWatch.
  5. Dans la zone de recherche, saisissez OnlineIndexPercentageProgress.
    Remarque : si la recherche ne renvoie aucun résultat, attendez environ une minute que les métriques soient renseignées. Ensuite, réessayez.
  6. Choisissez le nom de l'index pour voir la progression.

Déterminez le nombre de WCU supplémentaires dont vous avez besoin en divisant la taille de la table en kilo-octets par le temps de remplissage souhaité. Par exemple, supposons que vous ayez une table de 1 Gio (1 074 000 Ko). Vous souhaitez que le processus de remplissage se termine en 10 minutes (600 secondes). Voici le nombre de WCU dont vous avez besoin :

1 074 000/600 = 1 790 WCU

Remarque : il s'agit d'une estimation. Le temps de création varie en fonction de la façon dont vous distribuez les clés entre les partitions, de la taille des éléments, du nombre d'attributs projetés depuis la table vers l'index, etc.

Pour mettre en service une capacité d'écriture supplémentaire :

  1. Ouvrez la console DynamoDB.
  2. Dans le volet de navigation, choisissez Tables, puis sélectionnez votre table dans la liste.
  3. Choisissez l'onglet Capacité.
  4. Augmentez la capacité d'écriture de l'index, puis choisissez 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.