- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想进行更新,但我想添加的条件检查不是基于主表的哈希/范围,而是基于 GSI。
实际上,如果给定的属性(即 GSI 的哈希值)已经存在,我想使保存失败。
例如,在一个虚构的员工表中,“SSN”是哈希键,“EmployeeId”上有一个 GSI。这两个属性都必须是独一无二的。在保存员工时,我想确保表中没有使用“SSN”或“EmployeeId”。我可以针对表的哈希值(即 SSN)执行此操作,但不能针对 GSI 的哈希值执行此操作。
是否支持?我在文档中没有看到。
谢谢!
最佳答案
即使使用新宣布的事务,您描述的方法也无法使用 DynamoDB。原因是因为您的 GSI 最终是一致的,并且可能无法反射(reflect)表中项目的最新状态,因此不能在 GSI 上使用 ConditionExpression。
然而 ,您可以通过拥有一个单独的 EmployeeId-InUse 表来实现类似的功能。它可以像单个属性一样简单:employeeId
.由于这是一个表而不是 GSI,您可以使用 TransactWriteItems请求同时写入您的 EmployeeData 和您的 EmployeeId-InUse 表。如果事务的任何部分失败,则事务将失败,因此您可以使用 ConditionExpression 到 Prevent Overwrites of an Existing Item以确保如果 SSN 或 EmployeeId 已经存在,交易将失败。
这是 dynamodb 请求的“TransactItems”部分的示例。
“TransactItems”: [
{
“Put” : {
“ConditionExpression” : “attribute_not_exists(ssn)”,
“Item” : {
... employee data goes here ...
},
“TableName”: “EmployeeData”
}
},
{
“Put” : {
“ConditionExpression” : “attribute_not_exists(employeeId)”,
“Item” : {
“employeeId”: {
“S” : “Employee1457”
}
},
“TableName”: “EmployeeIDs-InUse”
}
}
]
EmployeeId-InUse
每次添加或删除员工时,以及更新与给定 SSN 关联的员工 ID 时都使用表。另外,请注意事务消耗的容量是常规写入的两倍。
关于amazon-dynamodb - DynamoDBSaveExpression 对 GSI 进行条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53093787/
我想进行更新,但我想添加的条件检查不是基于主表的哈希/范围,而是基于 GSI。 实际上,如果给定的属性(即 GSI 的哈希值)已经存在,我想使保存失败。 例如,在一个虚构的员工表中,“SSN”是哈希键
我是一名优秀的程序员,十分优秀!