当有一个较旧的put请求时,我们如何处理dynamoDB中的情况?这个键已经执行了较新的删除操作。
由于更新的delete操作已经删除了记录,旧的put请求可以简单地再次写入记录,这是不正确的。
DynamoDB是否为最近删除的记录保存任何元数据?在DynamoDB中有什么办法处理这个案子吗?或者任何人都有任何建议来处理这个案子。
我使用的是高级别的DynamoDBMapper而不是低级的API。
发布于 2018-06-20 23:52:17
Dynamo没有保留任何关于先前删除的内容的“元数据”。考虑到您无法创建一个新属性来跟踪已删除状态,我认为处理此问题的唯一方法是:
选项1:创建自己的“元数据”表
创建一个单独的表来跟踪您删除的所有内容。您将拥有一个存储常规数据的main表和一个main_deleted表,其中只存储已从main表中删除的primary_keys。
在main表中插入任何项之前,请检查main_deleted表中的primary_key。如果它在那里,不要继续插入。
选项2:使用range_key
如果项目有排序键,则可以使用它标记已删除的项,而无需创建新属性。假设您有这个项目,其中range_key是一个UNIX时间戳:
{
"primary_key": "example",
"timestamp": 1234567890,
"other": "stuff"
}而不是删除项目primary_key=example,而是删除它的所有属性,并将timestamp设置为一个您从未用于常规项的值,如0。在插入或更新表中的项时,使用以前的条件表达式或数据库查询来检查项目之前是否被删除(换句话说,timestamp=0)。
我相信还会有很多其他的方法,也许(或者可能)上面这两种方法并不是最好的。发挥你的创造力!)
发布于 2018-06-20 14:37:09
我相信您可以使用ConditionExpression在更新(即放置)项目之前检查数据是否已经存在。UpdateItem和PutItem都有ConditionExpression在执行操作之前检查某些条件。
请参阅此条件写入
在您的示例中,您需要在执行更新操作之前检查hash key是否存在。
https://stackoverflow.com/questions/50914519
复制相似问题