Cómo eliminar por lotes en Dynamodb

Cómo eliminar por lotes en Dynamodb
Dynamodb sigue siendo una de las bases de datos más escalables debido a sus características sobresalientes. Entre las características más convenientes se encuentra la capacidad de eliminar los elementos de eliminación en DynamodB, ya que muchas aplicaciones dependen de los bultos de datos.

Dynamodb le permite eliminar o poner terabytes de datos utilizando una operación de BatchWriteItem. El código o comando requiere una sola llamada de BatchWriteItem para obtener hasta 25 operaciones de elemento Put o Eliminar. Si bien esto es equivalente a hasta 16 MB de contenido almacenado, los datos pueden ser más que eso, ya que algunos elementos pueden superar 400 kb durante la transmisión.

Este tutorial se centra en cómo eliminar por lotes en Dynamodb. Se centrará en la operación de BatchWriteItem y proporcionará varios métodos de cómo eliminar los elementos de eliminación de lotes utilizando la llamada de la API de BatchWriteItem. Por supuesto, encontrará ejemplos viables.

Métodos de cómo eliminar por lotes en Dynamodb

Métodos de cómo eliminar por lotes en Dynamodb

Uso de la operación de BatchWriteItem

En Amazon DynamoDB, puede usar el loteWriteItem operación para eliminar múltiples elementos de una o más tablas en una sola solicitud. La utilidad toma un objeto de solicitud que contiene un SolicitarItems mapa, donde las claves son nombres de tabla y los valores son listas de Borrar petición objetos. Cada Borrar petición El objeto debe tener la clave principal del elemento que desea eliminar.

A continuación se muestra un ejemplo de cómo puede usar el loteWriteItem Operación en el AWS SDK para Python (Boto3) para eliminar múltiples elementos de una tabla:

importar boto3
# Crear un cliente para Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Defina el nombre de la tabla y los nombres de la clave primaria
table_name = 'mytableName'
key_name = 'id'
# Crear una lista de elementos para eliminar
elementos_to_delete = [
key_name: 's': 'item1',
key_name: 's': 'item2',
key_name: 's': 'item3',
]
# Prepare el objeto de solicitud para la operación de BatchWriteItem
solicitud =
'Requestitems':
nombre de la tabla: [

'Borrar petición':
'Key': Artículo

para elemento en elementos_to_delete
]


# Ejecutar la operación de BatchWriteItem
Respuesta = Dynamodb.Batch_write_item (** solicitud)

Imprimir (respuesta)
Puede usar la operación de BatchWriteItem con su AWS SDK preferido.

Lote Eliminar elementos en DynamodB utilizando la operación WriteBatchItem

Deberías considerar usar el loteWriteItem operación en combinación con una operación de escaneo para recuperar elementos que coinciden con un filtro especificado. Luego, elimínelos en múltiples lotes si necesita muchos elementos eliminados a la vez.

Su código será el siguiente:

importar boto3
# Crear un cliente para Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Defina el nombre de la tabla y el nombre de la clave principal
table_name = 'mytableName'
key_name = 'id'
# Defina la expresión del filtro y los valores iniciales para el escaneo
filtre_expression = 'contiene (#ATTR ,: val)'
Expression_attribute_names = '#attr': 'some_attribute'
Expression_attribute_values ​​= ': val': 's': 'some_value'
# Inicializar una lista vacía para almacenar los elementos para eliminar
elementos_to_delete = []
# Use la operación de escaneo para recuperar elementos que coincidan con el filtro
Respuesta = Dynamodb.escanear(
TableName = table_name,
FilterExpression = filtre_expression,
ExpressionAttributeNames = Expression_Attribute_Names,
ExpressionAttributeValues ​​= Expression_Attribute_Values
)
# Extraer los elementos de la respuesta y agregarlos a la lista
elementos_to_delete.extender (respuesta ['ítems'])
# Sigue iterando mientras hay más elementos para recuperar
Mientras que 'LastEvaluedKey' en respuesta:
Respuesta = Dynamodb.escanear(
TableName = table_name,
FilterExpression = filtre_expression,
ExpressionAttributeNames = Expression_Attribute_Names,
ExpressionAttributeValues ​​= Expression_Attribute_Values,
ExclusiveStartkey = respuesta ['LastEvaluateKey']
)
elementos_to_delete.extender (respuesta ['ítems'])
# Defina el número máximo de elementos que se pueden eliminar en un solo lote
Batch_size = 25
# Inicializar una variable para realizar un seguimiento del índice inicial para el siguiente lote
start_index = 0
# Bucle hasta que se hayan eliminado todos los elementos
Mientras que inicio_index < len(items_to_delete):
# Determinar el índice final para el lote actual
end_index = min (start_index + batch_size, len (items_to_delete)))
# Prepare el objeto de solicitud para la operación de BatchWriteItem
solicitud =
'Requestitems':
nombre de la tabla: [

'Borrar petición':
'Llave':
key_name: elemento [key_name]


para elemento en elementos_to_delete [start_index: end_index]
]


# Ejecutar la operación de BatchWriteItem
dinamodb.Batch_write_item (** solicitud)
# Actualizar el índice inicial para el próximo lote
start_index = end_index

print ('deleted elementos de la tabla '.formato (len (elementos_to_delete), table_name))

En el ejemplo anterior, el escanear Operation recupera elementos de la tabla que coinciden con un filtro especificado (Some_attribute contiene algún_value). Los elementos formarán una lista antes de ser procesado en lotes de 25 (o menos) elementos simultáneamente utilizando el loteWriteItem operación. El script bours a través de todos los lotes de elementos y los elimina un lote tras otro.

Conclusión

La función de eliminación de lotes en DynamodB puede aumentar significativamente el rendimiento de su base de datos, particularmente cuando se trata de muchos datos. En particular, la operación de BatchWriteItem no se comporta como el comando DeleteItem. Por ejemplo, no devuelve los detalles de los elementos eliminados en su respuesta.