Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何在dynamoDB全局表中实现强删除一致性_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Amazon web services 如何在dynamoDB全局表中实现强删除一致性

Amazon web services 如何在dynamoDB全局表中实现强删除一致性,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,在DynamoDB全局表中,如果一个区域接收到一条记录的删除请求,而另一个区域在同一时间接收到更新,我们如何确保删除操作优先,并且冲突解决后记录不存在。 换句话说,我们可以实现全局表的强删除一致性吗?您是否希望更新失败并出现错误,或者如果在更新之前删除了记录,那么删除该记录就足够了 如果是后者,那么情况差不多就是这样:项目被删除;有时在更新之前,有时在更新之后;但它们总是被删除。唯一的区别是,根据操作顺序,一些更新似乎会成功,而另一些则会失败 然而,如果您需要更新总是失败,那么我担心您需要一个分

在DynamoDB全局表中,如果一个区域接收到一条记录的删除请求,而另一个区域在同一时间接收到更新,我们如何确保删除操作优先,并且冲突解决后记录不存在。
换句话说,我们可以实现全局表的强删除一致性吗?

您是否希望更新失败并出现错误,或者如果在更新之前删除了记录,那么删除该记录就足够了

如果是后者,那么情况差不多就是这样:项目被删除;有时在更新之前,有时在更新之后;但它们总是被删除。唯一的区别是,根据操作顺序,一些更新似乎会成功,而另一些则会失败

然而,如果您需要更新总是失败,那么我担心您需要一个分布式全局锁:这将是昂贵和缓慢的


如果您想亲自查看,我建议设置一个测试:创建一个全局表并添加一组项(比如10000),然后使用来自同一EC2实例的两个DynamoDB客户机,在两个不同的区域以紧密循环的方式执行删除和更新请求。最后,您应该会看到所有项目都被删除。

您是否希望更新失败并出现错误,或者如果在更新之前删除了记录,那么删除记录就足够了

如果是后者,那么情况差不多就是这样:项目被删除;有时在更新之前,有时在更新之后;但它们总是被删除。唯一的区别是,根据操作顺序,一些更新似乎会成功,而另一些则会失败

然而,如果您需要更新总是失败,那么我担心您需要一个分布式全局锁:这将是昂贵和缓慢的


如果您想亲自查看,我建议设置一个测试:创建一个全局表并添加一组项(比如10000),然后使用来自同一EC2实例的两个DynamoDB客户机,在两个不同的区域以紧密循环的方式执行删除和更新请求。最后,您将看到所有项目都被删除。

您将永远无法保证全局表的强一致性

然而,这听起来像是有一个特定的竞态条件,你正试图阻止其中的更新覆盖了删除,这是可以防止的

确保删除后不进行更新的最简单方法是使用特定区域作为每个项目的“主”区域。如果需要更新或删除项目,请使用主区域的端点。缺点是跨区域写入比相同区域写入具有更高的延迟。但是,这可能是一个可接受的折衷方案,具体取决于您的应用程序的详细信息

你如何着手实施这一点?您可以将
regionId
属性添加到表中,每次创建项目时,您都可以设置一个特定的区域,该区域应该是该项目的主区域。无论何时要更新/删除项目,请阅读该项目以查找项目的主区域,并向相应的区域端点发出更新/删除请求


这就是原则,但实际上有些东西可以让你更容易。DynamoDB向全局表中的所有项添加一些特殊属性(请参见),其中一个属性是
aws:rep:updateregion
,它是上次更新的区域。只要确保在需要更新或删除项目时,读取该属性,然后使用该区域的端点发出更新/删除请求。

您将永远无法保证全局表的强一致性

然而,这听起来像是有一个特定的竞态条件,你正试图阻止其中的更新覆盖了删除,这是可以防止的

确保删除后不进行更新的最简单方法是使用特定区域作为每个项目的“主”区域。如果需要更新或删除项目,请使用主区域的端点。缺点是跨区域写入比相同区域写入具有更高的延迟。但是,这可能是一个可接受的折衷方案,具体取决于您的应用程序的详细信息

你如何着手实施这一点?您可以将
regionId
属性添加到表中,每次创建项目时,您都可以设置一个特定的区域,该区域应该是该项目的主区域。无论何时要更新/删除项目,请阅读该项目以查找项目的主区域,并向相应的区域端点发出更新/删除请求

这就是原则,但实际上有些东西可以让你更容易。DynamoDB向全局表中的所有项添加一些特殊属性(请参见),其中一个属性是
aws:rep:updateregion
,它是上次更新的区域。只要确保在需要更新或删除项目时,读取该属性,然后使用该区域的端点发出更新/删除请求