我在 dynamodb 中有一个表,其中包含 deviceKey 的哈希键和时间戳的范围键。deviceKeys 的形式为“randomstring-num”,因此例如我可能有“abc-1”,其中字符串是 IoT 设备 ID,数字是事件序列。由于我们的物联网设置,我们可以获得看起来相同的重复消息。为了避免这些重复,我想避免插入具有相同 deviceKey 且彼此相隔 10 秒内的项目。我尝试执行以下操作,但似乎总是失败。
const params = {
TableName: 'test',
ConditionExpression: 'attribute_not_exists(#ts) and NOT (#ts between
:start and :end)
ExpressionAttributeNames: {
'#ts': 'timestamp'
},
ExpressionAttributeValues: {
':start': ts - (10 * 1000),
':end': ts + (10 * 1000),
},
Item: {
deviceKey: 'abc-1',
timestamp: Date.now(),
}
}
上面的代码总是导致条件失败。似乎只要我包含 NOT BETWEEN 部分的日期范围,它就会失败。我是否正在尝试这种哈希 + 范围键配置无法实现的东西?
总结一下,如果
hash range
abc-1 2019-03-08 12:35:36
存在,我不想让任何东西在向前或向后 10 秒内插入相同的哈希键,所以
hash range
abc-1 2019-03-08 12:35:38
应该失败。这些消息大致同时进入(相隔毫秒),所以在这种情况下,我不确定在插入之前进行查询是否是一个可行的选择。