gpt4 book ai didi

amazon-web-services - 从亚马逊dynamodb删除

转载 作者:行者123 更新时间:2023-12-04 07:58:47 25 4
gpt4 key购买 nike

有没有一种有效的方法可以一次从Amazon dynamodb表中删除所有项目。我已经通过了aws文档,但是显示了单个项目的删除。

最佳答案

如果您无法删除表格,则需要使用BatchWriteItem。如果所有条目都在单个HashKey中,则可以使用Query API检索记录,然后一次删除25个项目。如果没有,您可能必须扫描。

另外,您可以提供一个简单的AmazonDynamoDBClient包装程序(来自官方SDK),该包装器收集表中存在的一组哈希/范围键。然后,您将不需要查询或扫描在测试后插入的项目,因为您已经建立了Set。看起来像这样:

public class KeyCollectingAmazonDynamoDB implements AmazonDynamoDB
{
private final AmazonDynamoDB delegate;
// HashRangePair is something you have to define
private final Set<Key> contents;

public InsertGatheringAmazonDynamoDB( AmazonDynamoDB delegate )
{
this.delegate = delegate;
this.contents = new HashSet<>();
}

@Override
public PutItemResult putItem( PutItemRequest putItemRequest )
throws AmazonServiceException, AmazonClientException
{
contents.add( extractKey( putItemRequest.getItem() ) );
return delegate.putItem( putItemRequest );
}

private Key extractKey( Map<String, AttributeValue> item )
{
// TODO Define your hash/range key extraction here
// Create a Key object
return new Key( hashKey, rangeKey );
}

@Override
public DeleteItemResult deleteItem( DeleteItemRequest deleteItemRequest )
throws AmazonServiceException, AmazonClientException
{
contents.remove( deleteItemRequest.getKey() );
return delegate.deleteItem( deleteItemRequest );
}

@Override
public BatchWriteItemResult batchWriteItem( BatchWriteItemRequest batchWriteItemRequest )
throws AmazonServiceException, AmazonClientException
{
// Similar extraction, but in bulk.
for ( Map.Entry<String, List<WriteRequest>> entry : batchWriteItemRequest.getRequestItems().entrySet() )
{
String tableName = entry.getKey();
List<WriteRequest> writeRequests = entry.getValue();
for ( WriteRequest writeRequest : writeRequests )
{
PutRequest putRequest = writeRequest.getPutRequest();
if ( putRequest != null )
{
// Add to Set just like putItem
}
DeleteRequest deleteRequest = writeRequest.getDeleteRequest();
if ( deleteRequest != null )
{
// Remove from Set just like deleteItem
}
}
}

// Write through to DynamoDB
return delegate.batchWriteItem( batchWriteItemRequest );
}

// remaining methods elided, since they're direct delegation
}
KeyDynamoDB SDK中的一个类,该类在构造函数中接受零个,一个或两个 AttributeValue对象以表示哈希键或哈希/范围键。假设 equalshashCode方法有效,则可以在我描述的 Set中使用。如果没有,则必须编写自己的 Key类。

这将为您提供一个维护集,供您在测试中使用。它不是特定于表的,因此如果您使用多个表,则可能需要添加另一层集合。这会将 Set<Key>更改为 Map<TableName, Set<Key>>。您需要查看 getTableName()属性以选择要更新的正确 Set

测试完成后,获取表的内容并删除应该很简单。

最后的建议是:使用与测试应用程序不同的表进行测试。创建一个相同的架构,但是为表指定一个不同的名称。您甚至可能希望其他IAM用户阻止您的测试代码访问生产表。如果您对此有疑问,请随时为该场景打开一个单独的问题。

关于amazon-web-services - 从亚马逊dynamodb删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15963833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com