Сбой ConditionExpression при попытке сравнить ключ диапазона с предоставленным диапазоном дат - PullRequest
1 голос
/ 16 апреля 2019

У меня есть таблица внутри 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

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

...