DynamoDB Upsert - 更新还是创建?
DynamoDB Upsert - Update or Create?
我们使用 DynamoDB UpdateItem
。
这就像我们可以学习的“upsert”from the documentation
Edits an existing item's attributes, or adds a new item to the table if it does not already exist. [...]
当我们发出请求时,为了确定是否创建了项目或更新了现有项目,我们请求 ALL_OLD。这很好用,让我们能够区分 update
和 create
。
作为附加要求,我们还希望 return ALL_NEW
,但仍然知道执行的操作类型。
问题:这是否可以在单个请求中完成,还是我们必须发出第二个(获取)请求?
默认情况下,DynamoDB 不支持此功能,DynamoDB 流中没有 ALL
或 NEW_AND_OLD_IMAGES
,但您始终可以自己动手做。
当您执行 UpdateItem
调用时,您会得到 UpdateExpression
,这基本上是要应用到项目的更改列表。假设您在 操作之前告诉 DynamoDB return 看起来像 的项目,您可以在本地构建新状态。
只需创建 ALL_OLD
响应的副本,并在本地应用 UpdateExpression
的更改。这绝对比两次 API 调用快,但实现稍微复杂一些。
我们使用 DynamoDB UpdateItem
。
这就像我们可以学习的“upsert”from the documentation
Edits an existing item's attributes, or adds a new item to the table if it does not already exist. [...]
当我们发出请求时,为了确定是否创建了项目或更新了现有项目,我们请求 ALL_OLD。这很好用,让我们能够区分 update
和 create
。
作为附加要求,我们还希望 return ALL_NEW
,但仍然知道执行的操作类型。
问题:这是否可以在单个请求中完成,还是我们必须发出第二个(获取)请求?
默认情况下,DynamoDB 不支持此功能,DynamoDB 流中没有 ALL
或 NEW_AND_OLD_IMAGES
,但您始终可以自己动手做。
当您执行 UpdateItem
调用时,您会得到 UpdateExpression
,这基本上是要应用到项目的更改列表。假设您在 操作之前告诉 DynamoDB return 看起来像 的项目,您可以在本地构建新状态。
只需创建 ALL_OLD
响应的副本,并在本地应用 UpdateExpression
的更改。这绝对比两次 API 调用快,但实现稍微复杂一些。