Вместо использования нескольких строк для каждого изменения статуса, если вы обновили одну и ту же строку событий, вы можете использовать технику, описанную в разделе DynamoDB documentation в разделе «Использовать расчетное значение». В основном это связано с добавлением другого атрибута (скажем, 'outputStatusId'), который будет получен путем добавления случайного числа к statusId во время записи в DynamoDB. Например, для statusId из 2, nativeStatusId может быть одним из {"2-00", "2-01", .. "2-99"}. Настройка глобального вторичного индекса на производномStatusId даст вам некоторое преимущество, которое поможет предотвратить рост индекса.
Если вы уверены, что вы будете использовать этот индекс для только незавершенных событий, с последующим удалением атрибута derivedStatusId из записи, когда он переходит к готовому статусу будет удалить его из индекса, а также - что может быть хорошим свойство если события, как ожидается, закончат обработку в конце концов, и если они останутся навсегда. Этот метод называется «редким индексом» и более подробно описан here.
С вашего вопроса, похоже, сохранение записи истории состояния является желаемым свойством (я предполагаю это, потому что вы хотите иметь несколько строк для изменений состояния). Подумайте о том, чтобы положить эту историческую информацию в одну строку. DynamoDB поддерживает типы данных списка, а также имеет щедрый лимит в 400 Кбайт, который может позволить вам только захватить всю необходимую историческую информацию в той же записи.
Глобальный вторичный индекс на производномStatusId: statusId + (eventId mod n) сделает его не горячим, но все равно придется выполнять n запросов, чтобы все элементы были корректными? – smashbourne
Как будет выполняться сканирование на этом разреженном глобальном вторичном индексе? Поскольку я предполагаю, что сканирование будет работать для моего прецедента, так как не будет много незавершенных предметов в любой момент времени. – smashbourne
Если вы удалите готовые элементы из индекса, как упомянуто выше, сканирование будет весьма эффективным, так как глобальный вторичный индекс будет содержать только незавершенные элементы. –