Одним из возможных решений является Разреженный индекс .По сути, вы можете создать такой атрибут, как isLatestVersion
, то есть либо true
, либо у элемента нет этого атрибута.Затем вы можете создать GSI с этим атрибутом в качестве ключа раздела или ключа сортировки.В GSI появятся только те элементы, у которых есть этот атрибут, поэтому вы можете очень быстро сканировать GSI.Или, если вы используете isLatestVersion
в качестве ключа раздела GSI, то вы можете очень легко запросить GSI (т. Е. Может пригодиться что-то вроде получения последней версии всех пакетов, начинающихся с «Foo» ... но я нене знаю ваши другие варианты использования).
Вот подвох.Вы должны убедиться, что при добавлении новой версии вы удалите атрибут из предыдущей последней версии.Это достаточно просто сделать, используя DynamoDB Streams и функцию Lambda, или вы можете использовать DynamoDB TransactWriteItems , чтобы добавить новую версию пакета в вашу таблицу одновременно с удалением атрибута изстарая версия, но вам нужно тщательно рассмотреть все случаи, когда последняя версия может измениться.
В любом случае вам необходимо разработать код приложения, чтобы отфильтровывать случайные повторяющиеся записи для пакета.(GSI в конечном итоге непротиворечивы, поэтому после обновления последней версии существует очень короткий промежуток времени (обычно несколько миллисекунд), при котором возможно, что при запросе последней версии пакета вы можете получить две последние версии.)