从亚马逊 DynamoDB 中删除
在删除Amazon DynamoDB中的数据时,可能会遇到以下问题:
1. 无法直接删除整个表格,因为表格可能具有复杂的配置,例如Lambda触发器。
2. 按照逐条删除的方式删除记录速度较慢。
以下是一些使用AWS CLI命令删除所有记录的方法,这些命令需要使用jq程序进行JSON处理:
1. 逐条删除记录(速度较慢):
aws dynamodb scan --table-name my_table | \ jq -c '.Items[] | { partition_key, sort_key }' | \ tr '\n' '\0' | \ xargs -0 -n1 -t aws dynamodb delete-item --table-name my_table --key
2. 批量删除记录(每批最多25条记录):
aws dynamodb scan --table-name my_table | \ jq -c '[.Items | keys[] as $i | { index: $i, value: .[$i]}] | group_by(.index / 25 | floor)[] | { "my_table": [.[].value | { "DeleteRequest": { "Key": { partition_key, sort_key }}}] }' | \ tr '\n' '\0' | \ xargs -0 -n1 -t aws dynamodb batch-write-item --request-items
如果出现非空的"UnprocessedItems"响应,说明超过了写入容量。可以通过减小批量大小来解决此问题。对于每批次需要大约一秒的处理时间,可以将批量大小设置为5(假设写入容量为每秒5个)。
删除Amazon DynamoDB中的数据可以通过逐条删除或批量删除的方式进行。如果无法直接删除整个表格,可以使用上述AWS CLI命令进行删除。在使用批量删除时,如果出现"UnprocessedItems"响应,可以通过减小批量大小来解决写入容量超额的问题。
删除 Amazon DynamoDB 中的数据是一个常见的任务。使用 DynamoDBMapper 可以在几行代码中完成该任务。在这个例子中,首先使用凭证文件创建 AWS 凭证对象,然后用凭证对象创建 AmazonDynamoDBClient 对象。接下来,使用 AmazonDynamoDBClient 对象创建 DynamoDBMapper 对象。然后,创建一个 DynamoDBScanExpression 对象作为扫描条件,然后使用 DynamoDBMapper 对象的 scan 方法执行扫描操作,并将结果存储在 PaginatedScanList 对象中。最后,遍历 PaginatedScanList 对象,逐个删除数据。
但是,这种方法使用 scan 操作进行数据的删除,scan 操作在性能上较为昂贵。相比之下,使用 query 操作可以更加高效地删除数据,但是 API 调用上不够简洁。
要删除 Amazon DynamoDB 中的数据,可以使用 DynamoDBMapper 的 scan 方法进行操作。但是要注意,scan 操作的性能较低。如果对性能有更高要求,可以考虑使用 query 方法进行数据删除。
从上述内容中,可以总结出"Deletion from Amazon DynamoDB"这个问题的出现原因是,当我们在Amazon DynamoDB中删除一个表时,由于表名必须是唯一的,删除表的请求并不是立即执行的,而是将表的状态设置为"deleting",实际的删除操作需要一定的时间。
针对这个问题,可以采取以下解决方法:
1. 首先,通过调用DeleteTable API来发起删除表的请求。这个API会将表的状态设置为"deleting",并且返回一个TableDescription对象作为响应。
DeleteTableRequest deleteTableRequest = new DeleteTableRequest() .withTableName("myTable"); DeleteTableResult result = client.deleteTable(deleteTableRequest);
2. 接着,使用TableDescription对象来重新创建表。通过调用CreateTable API,并使用之前获取到的TableDescription对象作为参数,可以重新创建一个具有相同属性的表。
3. 等待一段时间,直到表的状态变为"deleting"以外的状态。这可能需要一些时间,因为实际的删除操作可能需要一段时间才能完成。
通过这些步骤,我们可以在Amazon DynamoDB中成功删除表,并且确保表名的唯一性。