Comment supporter par lots dans DynamoDB

Comment supporter par lots dans DynamoDB
DynamoDB reste l'une des bases de données les plus évolutives en raison de ses fonctionnalités exceptionnelles. Parmi les fonctionnalités les plus pratiques, il y a la possibilité de supprimer des éléments dans DynamoDB, car de nombreuses applications reposent sur des volumes de données.

DynamoDB vous permet de supprimer ou de mettre des téraoctets de données à l'aide d'une seule opération BatchWriteItem. Le code ou la commande nécessite un seul appel BatchWriteItem pour effectuer jusqu'à 25 opérations de put ou supprimer les éléments. Bien que cela soit équivalent à jusqu'à 16 Mo de contenu stocké, les données peuvent être plus que celle-ci, car certains éléments peuvent être supérieurs à 400 Ko pendant la transmission.

Ce tutoriel se concentre sur la façon de supprimer par lots dans DynamoDB. Il se concentrera sur le fonctionnement de BatchWriteItem et fournira diverses méthodes de suppression par lot d'éléments à l'aide de l'appel de l'API BatchWriteItem. Bien sûr, vous trouverez des exemples viables.

Méthodes sur la façon de supprimer par lots dans DynamoDB

Méthodes sur la façon de supprimer par lots dans DynamoDB

Utilisation de l'opération BatchWriteItem

Dans Amazon DynamoDB, vous pouvez utiliser le lot de lacets opération pour supprimer plusieurs éléments d'un ou plusieurs tables en une seule demande. L'utilitaire prend un objet de demande contenant un RequestItems map, où les clés sont des noms de table et les valeurs sont des listes de Supprimer la demande objets. Chaque Supprimer la demande L'objet doit avoir la clé principale de l'élément que vous souhaitez supprimer.

Vous trouverez ci-dessous un exemple de la façon dont vous pouvez utiliser le lot de lacets Fonctionnement dans le SDK AWS pour Python (Boto3) pour supprimer plusieurs éléments d'une table:

importer boto3
# Créer un client pour DynamoDB
dynamoDB = boto3.client ('dynamoDB')
# Définir le nom de la table et les noms de clé principale
table_name = 'mytablename'
key_name = 'id'
# Créez une liste d'éléments à supprimer
items_to_delete = [
key_name: 's': 'item1',
key_name: 's': 'item2',
key_name: 's': 'item3',
]]
# Préparez l'objet de demande pour l'opération BatchWriteItem
demande =
'RequestItems':
nom de la table: [

'Supprimer la demande':
«Clé»: article

pour l'article dans items_to_delete
]]


# Exécuter l'opération BatchWriteItem
réponse = dynamodb.batch_write_item (** requête)

Imprimer (réponse)
Vous pouvez utiliser l'opération BatchWriteItem avec votre SDK AWS préféré.

Supprimer le lot dans DynamoDB à l'aide de l'opération WriteBatchItem

Vous devriez envisager d'utiliser le lot de lacets Fonctionnement en combinaison avec une opération de scan pour récupérer les éléments qui correspondent à un filtre spécifié. Ensuite, supprimez-les en plusieurs lots si vous avez besoin de très nombreux articles supprimés immédiatement.

Votre code sera le suivant:

importer boto3
# Créer un client pour DynamoDB
dynamoDB = boto3.client ('dynamoDB')
# Définir le nom du tableau et le nom de la clé primaire
table_name = 'mytablename'
key_name = 'id'
# Définir l'expression du filtre et les valeurs initiales pour le scan
filter_expression = 'contient (#Attr ,: Val)'
expression_attribute_names = '#attr': 'some_attribute'
expression_attribute_values ​​= ': val': 's': 'some_value'
# Initialiser une liste vide pour stocker les articles à supprimer
items_to_delete = []
# Utilisez l'opération de scan pour récupérer les éléments qui correspondent au filtre
réponse = dynamodb.analyse(
TableName = Table_Name,
FilterExpression = filter_expression,
ExpressionAttributeNames = Expression_Attribute_Names,
ExpressionAttributeValues ​​= expression_attribute_values
)
# Extraire les éléments de la réponse et ajoutez-les à la liste
items_to_delete.étendre (réponse [«éléments»])
# Continuez à itération pendant qu'il y a plus d'articles à récupérer
tandis que «LasteévaluedKey» en réponse:
réponse = dynamodb.analyse(
TableName = Table_Name,
FilterExpression = filter_expression,
ExpressionAttributeNames = Expression_Attribute_Names,
ExpressionAttributeValues ​​= expression_attribute_values,
EXCLUSIVESTARTKEY = Response ['LASTEVALUYKEY']
)
items_to_delete.étendre (réponse [«éléments»])
# Définissez le nombre maximum d'éléments qui peuvent être supprimés en un seul lot
Batch_size = 25
# Initialiser une variable pour garder une trace de l'index de départ pour le prochain lot
start_index = 0
# Boucle jusqu'à ce que tous les articles aient été supprimés
tandis que start_index < len(items_to_delete):
# Déterminer l'index de fin du lot actuel
end_index = min (start_index + batch_size, len (items_to_delete)))
# Préparez l'objet de demande pour l'opération BatchWriteItem
demande =
'RequestItems':
nom de la table: [

'Supprimer la demande':
'Clé':
key_name: item [key_name]


pour item dans items_to_delete [start_index: end_index]
]]


# Exécuter l'opération BatchWriteItem
dynamodb.batch_write_item (** requête)
# Mettez à jour l'index de départ pour le prochain lot
start_index = end_index

print ('éléments supprimés de la table '.format (len (items_to_delete), table_name)))

Dans l'exemple ci-dessus, le analyse L'opération récupère les éléments de la table qui correspondent à un filtre spécifié (certains_attributs contient certains_values). Les éléments constitueront une liste avant d'être traité par lots de 25 (ou moins) lot de lacets opération. Le script boucle à travers tous les lots d'éléments et les supprime un lot après l'autre.

Conclusion

La fonction de suppression par lots dans DynamoDB peut considérablement augmenter les performances de votre base de données, en particulier lorsque vous traitez de nombreuses données. Notamment, l'opération BatchWriteItem ne se comporte pas comme la commande DeleteItem. Par exemple, il ne renvoie pas les détails des éléments supprimés dans votre réponse.