【发布时间】:2020-01-11 02:18:48
【问题描述】:
我们使用这段代码来操作dynamodb:
- 如果
user_id不存在,代码将向dynamodb插入一条记录 - 如果
user_id确实存在并且modify_time字段(在项目中)last_status_modify_time(在我的代码中),它将更新这个项目的modify_time。
大多数时候它是成功的,但有时它会抛出异常The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException。只是想知道我的条件表达式有问题吗?
这是我们的代码
private static void saveRoomStatusToDynamoDB(CacheClient client, ZRRoomItem item) {
if (item == null) {
return;
}
try {
logger.debug("begin saveRoomStatusToDynamoDB, item: {}", item);
String condition = String.format(
"attribute_not_exists(%s) or %s < :val",
DynamoConstants.FIELD_ZR_ROOM_ITEM_USER_ID,
DynamoConstants.FIELD_ZR_ROOM_ITEM_LAST_STATUS_MODIFY_TIME);
Map<String, Object> valueMap = new HashMap<>();
valueMap.put(":val", item.getLastStatusModifyTime());
//l_putItem will call dynamodb api
boolean result = DynamoDBUtil.getInstance().l_putItem(
DynamoConstants.TABLE_ZR_ROOM_ITEM, item.toDynamoItem(),
condition, valueMap);
} catch (Exception e) {
logger.error("saveRoomStatusToDynamoDB error, item: {}, {}",
item,
WebLogger.printStackTrace(e));
}
}
【问题讨论】:
标签: amazon-dynamodb conditional-operator