我在dynamodb中有一个表,其中带有deviceKey的哈希键和timestamp的范围键。 deviceKeys的格式为“ randomstring-num”,例如,我可能具有“ abc-1”,其中字符串是IoT设备ID,数字是事件序列。由于我们的物联网设置,我们可以获得重复的消息,这些消息看起来相同。为避免这些重复,我想避免插入彼此具有10秒内相同deviceKey的项。我尝试执行以下操作,但它似乎总是失败。
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
应该失败。这些消息大约在同一时间(相距毫秒)传入,因此我不确定在这种情况下在插入之前进行查询是否可行。