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.
Différences entre une base de données relationnelle (SQL) et DynamoDB lors de la gestion des index
Les index donnent accès à d'autres modèles de requête et peuvent accélérer les requêtes. Cette section compare et met en contraste la création et l'utilisation d'index dans SQL Amazon DynamoDB.
Que vous utilisiez une base de données relationnelle ou DynamoDB, vous devez recourir à la création d'index judicieusement. Chaque fois qu'une écriture se produit sur une table, tous les index de la table doivent être mis à jour. Dans un environnement à forte densité d'écritures avec de grandes tables, cette opération peut consommer d'importantes quantité de ressources système. Dans un environnement en lecture seule ou principalement en lecture, ce risque est moins important. Cependant, vous devez vous assurer que les index sont effectivement utilisés par votre application et pas simplement qu'ils occupent de l'espace.
Rubriques
Différences entre une base de données relationnelle (SQL) et DynamoDB lors de la création d'un index
Comparez l'CREATE INDEX
instruction SQL avec l'UpdateTable
opération dans Amazon DynamoDB.
Création d'un index avec SQL
Dans une base de données relationnelle, un index est une structure de données qui vous permet d'exécuter des requêtes rapides sur différentes colonnes d'une table. Vous pouvez utiliser l'CREATE
INDEX
SQLinstruction pour ajouter un index à une table existante, en spécifiant les colonnes à indexer. Une fois que l'index a été créé, vous pouvez interroger les données de la table comme à l'habitude, mais maintenant la base de données peut utiliser l'index pour retrouver rapidement les lignes spécifiées dans le tableau au lieu d'analyser la totalité de la table.
Une fois que vous créez un index, la base de données le gère automatiquement. Chaque fois que vous modifiez les données de la table, l'index est automatiquement modifié pour refléter les modifications de la table.
Dans MySQL, vous créeriez un index comme celui-ci.
CREATE INDEX GenreAndPriceIndex ON Music (genre, price);
Création d'un index dans DynamoDB
Dans DynamoDB, vous pouvez créer et utiliser un index secondaire à des fins similaires.
Les index dans DynamoDB sont différents de leurs équivalents relationnels. Lorsque vous créez un index secondaire, vous devez spécifier ses attributs de clé, c'est-à-dire une clé de partition et une clé de tri. Après avoir créé l'index secondaire, vous pouvez effectuer une opération Query
ou Scan
sur celui-ci, comme vous le feriez avec une table. DynamoDB n'ayant pas d'optimiseur de requête, un index secondaire n'est utilisé que lorsque vous effectuez une opération Query
ou Scan
sur celui-ci.
DynamoDB prend en charge deux types d'index :
-
Index secondaires globaux – La clé primaire de l'index peut être constituée de deux attributs quelconques de sa table.
-
Index secondaires locaux – La clé de partition de l'index doit être la même que la clé de partition de sa table. Cependant, la clé de tri peut être n'importe quel autre attribut.
DynamoDB veille à ce que les données dans un index secondaire soient éventuellement cohérentes avec sa table. Vous pouvez demander des opérations Query
ou Scan
fortement cohérentes sur une table ou un index secondaire local. Cependant, les index secondaires globaux ne prennent en charge que la cohérence éventuelle.
Vous pouvez ajouter un index secondaire global à une table existante à l'aide de l'opération UpdateTable
et en spécifiant GlobalSecondaryIndexUpdates
.
{ TableName: "Music", AttributeDefinitions:[ {AttributeName: "Genre", AttributeType: "S"}, {AttributeName: "Price", AttributeType: "N"} ], GlobalSecondaryIndexUpdates: [ { Create: { IndexName: "GenreAndPriceIndex", KeySchema: [ {AttributeName: "Genre", KeyType: "HASH"}, //Partition key {AttributeName: "Price", KeyType: "RANGE"}, //Sort key ], Projection: { "ProjectionType": "ALL" }, ProvisionedThroughput: { // Only specified if using provisioned mode "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }
Vous devez fournir les paramètres suivants à UpdateTable
:
-
TableName
– Table à laquelle l'index sera associé. -
AttributeDefinitions
– Types de données pour les attributs de schéma de clé de l'index. -
GlobalSecondaryIndexUpdates
– Détails sur l'index que vous souhaitez créer :-
IndexName
– Nom pour l'index. -
KeySchema
– Attributs utilisés pour la clé primaire de l'index. -
Projection
– Attributs de la table qui sont copiés dans l'index. Dans ce cas,ALL
signifie que tous les attributs sont copiés. -
ProvisionedThroughput (for provisioned tables)
– Nombre de lectures et d'écritures par seconde nécessaires pour ce index. (Cette information est distincte des paramètres de débit alloué de la table.)
-
Une partie de cette opération implique le renvoi de données de la table vers le nouvel index. Pendant le renvoi, la table demeure disponible. Cependant, l'index n'est pas prêt jusqu'à ce que son attribut Backfilling
passe de true à false. Vous pouvez utiliser l'opération DescribeTable
pour afficher cet attribut.
Différences entre une base de données relationnelle (SQL) et DynamoDB lors de l'interrogation et de l'analyse d'un index
Comparez l'interrogation et l'analyse d'un index à l'aide de l'SELECTinstruction in SQL avec les Scan
opérations Query
et dans Amazon DynamoDB.
Rubriques
Interrogation et analyse d'un index avec SQL
Dans une base de données relationnelle, vous n'utilisez pas directement les index. Au lieu de cela, vous interrogez les tables à l'aide d'instructions SELECT
et l'optimiseur de requête peut utiliser tous les index.
Un optimiseur de requêtes est un composant du système de gestion de base de données relationnelle (RDBMS) qui évalue les index disponibles et détermine s'ils peuvent être utilisés pour accélérer une requête. Si les index peuvent être utilisés pour accélérer une requête, il RDBMS accède d'abord à l'index, puis l'utilise pour localiser les données dans la table.
Voici quelques SQL instructions qui peuvent être utilisées GenreAndPriceIndexpour améliorer les performances. Nous supposons que la table Music possède suffisamment de données pour que l'optimiseur de requête décide d'utiliser cet index, plutôt que de simplement analyser la totalité de la table.
/* All of the rock songs */ SELECT * FROM Music WHERE Genre = 'Rock';
/* All of the cheap country songs */ SELECT Artist, SongTitle, Price FROM Music WHERE Genre = 'Country' AND Price < 0.50;
Interrogation et analyse d'un index dans DynamoDB
Dans DynamoDB, vous effectuez les opérations Query
et Scan
directement sur l'index, de la même manière que vous le feriez sur une table. Vous pouvez utiliser API DynamoDB ou partiQL SQL (un langage de requête compatible) pour interroger ou scanner l'index. Vous devez spécifier à la fois TableName
et IndexName
.
Voici quelques requêtes effectuées GenreAndPriceIndexdans DynamoDB. (Le schéma de clé de l'index est composé de Genre et de Price.)