Сбой 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
должен потерпеть неудачу. Эти сообщения поступают примерно в одно и то же время (с интервалом в мс), поэтому я не совсем уверен, является ли в этом случае приемлемым выполнение запроса перед вставкой.