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