繁体   English   中英

DynamoDB,插入前检查父项是否存在,条件表达式

[英]DynamoDB, Check if Parent Exist before insert ,condition expression

我在 AWS Dynamodb 中有一个单表设计,如下所示,带有两个 GSI

PK SK
用户#Alex 用户#Alex
订单#1
订单#2

所以现在如果我做一个插入项目。 使用条件表达式确保用户在添加订单之前存在。 go 如何检查属性是否存在?

我在下面尝试,但失败了。 看完文章就知道为什么了。

const putItemParams = {
  TableName: process.env.TABLE_NAME,
  Item: {
    PK: {
      S: "USER#Alex",
    },
    SK: {
      S: "ORDER#1",
    },
    ConditionExpression: "attribute_exists(PK)",
  },
};

在阅读@AlexDebrie https 的这篇文章后://www.alexdebrie.com/posts/dynamodb-condition-expressions/

我知道 Dynamodb 会查找要写入的 Item 的 Put Item 键,并检查是否存在 PK ,这在上述语句中是错误的。 我如何适应逻辑。

我能想到交易物品

transactWriteItems : [
  ConditionCheck : checkIf user exist with Pk:USER#Alex and SK:USER#Alex,
  Put :  Then do the put
]

我不确定我是否遗漏了一些明显的东西。 如果 transactWriteItems 是唯一的方法,那么明显的缺点是对于我的许多 put Items 将变成 transactWriteItems 相关的成本加倍,因为 TransactWriteItems 具有双倍的 RRU 和 WRU。

为什么不只做一个(低成本)get-item 来检查用户是否存在,如果存在则执行订单插入,如果不存在则执行任何适当的操作?

这似乎不必是事务性的。

您是否担心另一个进程在尝试插入订单时可能会删除用户? 如果是这样,这似乎是一个奇怪的设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM