DynamoDB 有条件写入

  • 默认情况下,DynamoDB 写入操作(PutItemUpdateItem 和 DeleteItem)是无条件的:其中每项操作都会覆盖带指定主键的现有项目。
  • DynamoDB 可以选择性地对这些操作支持有条件写入。有条件写入仅在项目属性满足一个或多个预期条件时才会成功。否则,它会返回错误。有条件写入在很多情况下很有用。例如,您可能希望 PutItem 操作仅在尚不存在具有相同主键的项目时成功。或者,如果某个项目的其中一个属性具有一个特定值,您可以阻止 UpdateItem 操作修改该项目。
  • 有条件写入在多个用户尝试修改同一项目的情况下很有用。请考虑下图,其中两位用户(Alice 和 Bob)正在处理 DynamoDB 表中的同一项目。

有条件写入幂等性

如果条件检查位于同一个要更新的属性上,则条件写入可以是幂等 的。这意味着,仅当项目中的某些属性值与您在请求时期望它们具有的值匹配时,DynamoDB 才执行给定的写入请求。

例如,假设您发出一个 UpdateItem 请求来以 3 为递增量提高某个项目的 Price,但仅在 Price 当前为 20 时才执行此操作。在已发送该请求但尚未获得返回的结果之间的时间内,网络出现了错误,您不知道该请求是否成功。由于此条件写入是幂等的,您可以重试同一 UpdateItem 请求,而 DynamoDB 将仅在 Price 当前为 20 时更新项目。

什么是幂等性

HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同

Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.

这里需要关注几个重点:

  1. 幂等不仅仅只是一次(或多次)请求对资源没有副作用(比如查询数据库操作,没有增删改,因此没有对数据库有任何影响)。

  2. 幂等还包括第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。

  3. 幂等关注的是以后的多次请求是否对资源产生的副作用,而不关注结果。

  4. 网络超时等问题,不是幂等的讨论范围。

幂等性是系统服务对外一种承诺(而不是实现),承诺只要调用接口成功,外部多次调用对系统的影响是一致的。声明为幂等的服务会认为外部调用失败是常态,并且失败之后必然会有重试。

猜你喜欢

转载自www.cnblogs.com/cloudrivers/p/11618585.html