Сбой ConditionExpression при попытке сравнить ключ диапазона с предоставленным диапазоном дат

У меня есть таблица внутри DynamodB с хэш-ключом deviceKey и ключ диапазона timestamp. Ключи deviceKeys имеют форму "randomstring-num", поэтому, например, у меня может быть "abc-1", где строка - это идентификатор устройства IoT, а число - последовательность событий. Благодаря нашей настройке IoT мы можем получать дубликаты сообщений, которые выглядят одинаково. Чтобы избежать этих дубликатов, я хочу избегать вставки элементов с одинаковым ключом устройства, которые находятся в пределах 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(),
  }
}

Приведенный выше код всегда приводит к сбою условия. Кажется, что всякий раз, когда я включаю диапазон дат НЕ МЕЖДУ частью, это терпит неудачу. Я пытаюсь что-то, что не возможно с этой конфигурацией ключа хэш + диапазон?

Подводя итог, если

hash    range
abc-1   2019-03-08 12:35:36

существует, я не хочу разрешать вставку чего-либо в течение 10 секунд вперед или назад с тем же хеш-ключом, поэтому

hash    range
abc-1   2019-03-08 12:35:38

должен потерпеть неудачу. Эти сообщения поступают примерно в одно и то же время (с интервалом в мс), поэтому я не совсем уверен, является ли в этом случае приемлемым выполнение запроса перед вставкой.

0 ответов

Другие вопросы по тегам