首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamoDB是否支持Tombstone记录处理?

DynamoDB是否支持Tombstone记录处理?
EN

Stack Overflow用户
提问于 2018-06-18 17:15:29
回答 2查看 852关注 0票数 0

当有一个较旧的put请求时,我们如何处理dynamoDB中的情况?这个键已经执行了较新的删除操作。

由于更新的delete操作已经删除了记录,旧的put请求可以简单地再次写入记录,这是不正确的。

DynamoDB是否为最近删除的记录保存任何元数据?在DynamoDB中有什么办法处理这个案子吗?或者任何人都有任何建议来处理这个案子。

我使用的是高级别的DynamoDBMapper而不是低级的API。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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时间戳:

代码语言:javascript
复制
{
    "primary_key": "example",
    "timestamp": 1234567890,
    "other": "stuff"
}

而不是删除项目primary_key=example,而是删除它的所有属性,并将timestamp设置为一个您从未用于常规项的值,如0。在插入或更新表中的项时,使用以前的条件表达式或数据库查询来检查项目之前是否被删除(换句话说,timestamp=0)。

我相信还会有很多其他的方法,也许(或者可能)上面这两种方法并不是最好的。发挥你的创造力!)

票数 1
EN

Stack Overflow用户

发布于 2018-06-20 14:37:09

我相信您可以使用ConditionExpression在更新(即放置)项目之前检查数据是否已经存在。UpdateItemPutItem都有ConditionExpression在执行操作之前检查某些条件。

请参阅此条件写入

在您的示例中,您需要在执行更新操作之前检查hash key是否存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50914519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档