Amélioration de l'accès aux données avec les index secondaires - Amazon DynamoDB

Amélioration de l'accès aux données avec les index secondaires

Amazon DynamoDB fournit un accès rapide aux éléments d'une table en spécifiant des valeurs de clé principale. Cependant, il serait utile pour de nombreuses applications de disposer d'une ou de plusieurs clés secondaires (ou alternatives) permettant un accès efficace aux données présentant d'autres attributs que la clé primaire. Pour ce faire, vous pouvez créer un ou plusieurs index secondaires pour une table, et émettre des demandes Query ou Scan sur ces index.

Un index secondaire est une structure de données qui contient un sous-ensemble d'attributs d'une table, ainsi qu'une autre clé pour prendre en charge des opérations Query. Vous pouvez récupérer les données de l'index à l'aide d'un Query, globalement de la même manière que vous utilisez Query avec une table. Une table peut avoir plusieurs index secondaires, ce qui permet à vos applications d'accéder à de nombreux modèles de requête différents.

Note

Vous pouvez également Scan un index, globalement de la même manière que vous le feriez pour Scan une table.

Chaque index secondaire est associé à une table dont il extrait ses données. Il s'agit de la table de base de l'index. Lorsque vous créez un index, vous définissez une autre clé pour cet index (clé de partition et clé de tri). Vous définissez également les attributs qui doivent être projetés, ou copiés de la table de base vers l'index. DynamoDB copie ces attributs dans l'index, ainsi que les attributs de clé primaire de la table de base. Vous pouvez ensuite interroger ou analyser l'index de la même manière que vous procéderiez avec une table.

DynamoDB grère automatiquement chaque index secondaire . Lorsque vous ajoutez, modifiez ou supprimez des éléments dans la table de base, tous les index de cette table sont également mis à jour pour refléter ces modifications.

DynamoDB prend en charge deux types d'index secondaires :

  • Index secondaire globalIndex avec une clé de partition et une clé de tri pouvant différer de celles de la table de base. Un index secondaire global est considéré comme « global », car les requêtes sur l'index peuvent couvrir toutes les données de la table de base, sur toutes les partitions. Un index secondaire global est stocké dans son propre espace de partition à l'écart de la table de base, et est mis à l'échelle séparément de celle-ci.

  • Index secondaire localIndex avec la même clé de partition que la table de base, mais une clé de tri différente. Un index secondaire est « local » dans la mesure où la portée de chacune de ses partitions correspond à une partition de la table de base ayant la même valeur de clé de partition.

Vous devez tenir compte des exigences de votre application lorsque vous déterminez le type d'index à utiliser. Le tableau suivant montre les principales différences entre un index secondaire global et un index secondaire local.

Caractéristiques Index global secondaire Index local secondaire
Schéma de clé La clé primaire d'un index secondaire global peut être simple (clé de partition) ou composite (clé de partition et clé de tri). La clé primaire d'un index secondaire local doit être composite (clé de partition et clé de tri).
Attributs de clé La clé de partition d'index et la clé de tri (le cas échéant) peuvent être n'importe quels attributs de table de base de type chaîne, nombre ou binaire. La clé de partition de l'index est le même attribut que la clé de partition de la table de base. La clé de tri peut être n'importe quel attribut de la table de base, de type chaîne, nombre ou binaire.
Restrictions de taille par valeur de clé de partition Les index secondaires globaux ne font l'objet d'aucune restriction de taille . Pour chaque valeur de clé de partition, la taille totale de tous les éléments indexés doit être inférieure ou égale à 10 Go.
Opérations d'index en ligne Vous pouvez créer des index secondaires globaux au moment où vous créez une table. Vous pouvez ajouter un index secondaire global à une table ou en supprimer un. Pour de plus amples informations, veuillez consulter Gestion des index secondaires globaux. Vous créez des index secondaires locaux au moment où vous créez une table. Vous ne pouvez ni ajouter un index secondaire local à une table, ni en supprimer un.
Requêtes et partitions Un index secondaire global vous permet d'interroger une table entière, toutes partitions incluses. Un index secondaire local vous permet d'interroger une seule partition en spécifiant la valeur de clé de partition dans la requête.
Cohérence en lecture Les requêtes sur les index secondaires globaux ne prennent en charge que la cohérence éventuelle. Lorsque vous interrogez un index secondaire local, vous avez le choix entre la cohérence éventuelle ou la cohérence forte.
Consommation de débit alloué Chaque index secondaire global a ses propres paramètres de débit approvisionné pour les activités de lecture et d'écriture. Les requêtes ou analyses sur un index secondaire global consomment des unités de capacité de l'index, pas de la table de base. Il en va de même pour des mises à jour d'index secondaire global résultant d'écritures dans la table. Les requêtes ou analyses sur un index secondaire local consomment des unités de capacité de lecture de la table de base. Lorsque vous écrivez dans une table, les index secondaires locaux de celles-ci sont mis à jour, ce qui entraîne une consommation de ses unités de capacité d'écriture.
Attributs projetés Les requêtes ou analyses d'index secondaire global ne vous permettent d'interroger que les attributs projetés dans l'index. DynamoDB n'extrait aucun attribut de la table. Si vous interrogez ou analysez un index secondaire local, vous pouvez demander des attributs qui ne sont pas projetés dans l'index. DynamoDB extrait automatiquement ces attributs de la table.

Si vous souhaitez créer plus d'une table avec des index secondaires, vous devez le faire de manière séquentielle. Par exemple, vous créez la première table et attendez qu'elle devienne ACTIVE, vous créez la table suivante et attendez qu'elle devienne ACTIVE, et ainsi de suite. Si vous essayez de créer simultanément plus d'une table avec un index secondaire, DynamoDB renvoie une LimitExceededException.

Pour chaque index secondaire, vous devez spécifier les informations suivantes :

  • Type d'index à créer : index secondaire global ou un index secondaire local.

  • Un nom pour l'index. Les règles de dénomination pour les index sont identiques à celles pour les tables, comme indiqué dans Quotas de service, de compte et de table dans Amazon DynamoDB. Le nom doit être unique pour la table de base à laquelle il est associé, mais vous pouvez utiliser le même nom pour des index qui sont associés à d'autres tables de base.

  • Le schéma de clés pour l'index. Chaque attribut du schéma de clé d'index doit être un attribut de niveau supérieur de type String, Number ou Binary. D'autres types de données, y compris les documents et les jeux, ne sont pas autorisés. Les autres exigences pour le schéma de clé dépendent du type d'index :

    • Pour un index secondaire global, la clé de partition peut être n'importe quel attribut scalaire de la table de base. Une clé de tri est facultative et peut également être n'importe quel attribut scalaire de la table de base.

    • Pour un index secondaire local, la clé de partition doit être la même que celle de la table de base, et la clé de tri doit être un attribut de la table de base autre qu'une clé.

  • Attributs supplémentaires, le cas échéant, à projeter de la table de base vers l'index. Ces attributs sont en plus des attributs clés de la table, qui sont automatiquement projetés dans chaque index. Vous pouvez projeter des attributs de n'importe quel type de données, y compris scalaires, documents et jeux.

  • Les paramètres de débit alloué pour l'index, si nécessaire :

    • Pour un index secondaire global, vous devez spécifier des paramètres d'unité de capacité de lecture et d'écriture. Ces paramètres de débit alloué sont indépendants des paramètres de la table de base.

    • Pour un index secondaire local, vous n'avez pas besoin de spécifier des paramètres d'unité de capacité de lecture et d'écriture. Toute opération de lecture et d'écriture sur un index secondaire local tire les paramètres de débit approvisionné de sa table de base.

Pour bénéficier d'une flexibilité de requête maximum, vous pouvez créer jusqu'à 20 index secondaires globaux (quota par défaut) et 5 index secondaires locaux par table.

Le quota des index secondaires globaux par table est de cinq pour les régions AWS suivantes :

  • AWS GovCloud (US-East)

  • AWS GovCloud (US-West)

  • Europe (Stockholm)

Pour obtenir la liste détaillée des index secondaires sur une table, utilisez l'opération DescribeTable. L'opération DescribeTable renvoie le nom, la taille de stockage et le nombre d'éléments pour chaque index secondaire sur la table. Ces valeurs ne sont pas mises à jour en temps réel, mais elles sont actualisées environ toutes les six heures.

Vous pouvez accéder aux données dans un index secondaire à l'aide de l'opération Query ou Scan. Vous devez spécifier le nom de la table de base et le nom de l'index que vous souhaitez utiliser, les attributs à renvoyer dans les résultats, ainsi que tous les filtres ou expressions de condition que vous souhaitez appliquer. DynamoDB peut renvoyer les résultats dans l'ordre croissant ou décroissant.

Lorsque vous supprimez une table, tous les index associés à cette table sont également supprimés.

Pour connaître les bonnes pratiques, consultez Bonnes pratiques d'utilisation d'index secondaires dans DynamoDB.