1

我在 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

应该失败。这些消息大致同时进入(相隔毫秒),所以在这种情况下,我不确定在插入之前进行查询是否是一个可行的选择。

4

0 回答 0