Tirer profit des index partiellement alloués - Amazon DynamoDB

Tirer profit des index partiellement alloués

Pour tout élément d'une table, DynamoDB écrit une entrée d'index correspondante uniquement si la valeur la clé de tri d'index est présente dans l'élément. Si la clé de tri n'apparaît pas dans chaque élément de table, l'index est considéré comme fragmenté.

Les index fragmentés s'avèrent utiles pour les requêtes sur une petite sous-section d'une table. Par exemple, supposons que vous ayez une table dans laquelle vous stockez toutes vos commandes client avec les attributs de clé suivants :

  • Clé de partition: CustomerId

  • Clé de tri: OrderId

Pour suivre les commandes en cours, vous pouvez insérer un attribut nommé isOpen dans des articles en commande qui n'ont pas encore été expédiés. Ensuite, lorsque la commande est expédiée, vous pouvez supprimer l'attribut. Si vous créez ensuite un index sur CustomerId (clé de partition) et isOpen (clé de tri), seules les commandes avec l'attribut isOpen défini apparaissent dans celui-ci. Lorsque vous avez des milliers de commandes dont seul un petit nombre est en cours, il est plus rapide et moins cher d'interroger cet index pour rechercher les commandes en cours que d'analyser la totalité de la table.

Au lieu d'utiliser un type d'attribut tel que isOpen, vous pourriez utiliser un attribut avec une valeur produisant un ordre de tri utile dans l'index. Par exemple, vous pouvez utiliser un attribut OrderOpenDate défini sur la date à laquelle chaque commande a été passée, puis le supprimer une fois que la commande a été exécutée. Ainsi, lorsque vous interrogez l'index fragmenté, les éléments sont renvoyés triés par la date à laquelle la commande a été passée.

Exemples d'index fragmentés dans DynamoDB

Les index secondaires globaux sont fragmentés par défaut. Lorsque vous créez un index secondaire global, vous spécifiez une clé de partition et éventuellement une clé de tri. Seuls les éléments de la table de base qui contiennent ces attributs apparaissent dans l'index.

En définissant un index secondaire global comme étant fragmenté, vous pouvez l'allouer avec un débit d'écriture moins élevé que celui de la table de base, tout en atteignant d'excellentes performances.

Par exemple, une application de jeu peut suivre les scores de chaque utilisateur, mais n'a besoin généralement d'interroger que quelques scores élevés. La conception suivante gère efficacement ce scénario :


          Exemple d'index secondaire global fragmenté.

Ici, Rick a joué trois parties et a atteint le statut Champ dans l'une d'entre elles. Padma a joué quatre parties et a atteint le statut Champ dans deux d'entre elles. Notez que l'attribut Award est présent uniquement dans les éléments où l'utilisateur a remporté une récompense. L'index secondaire global associé ressemble à ce qui suit :


          Exemple d'index secondaire global fragmenté.

L'index secondaire global contient uniquement les scores élevés qui sont fréquemment interrogés, ce qui représente un petit sous-ensemble des éléments de la table de base.