получить последний / максимальный для каждого ключа раздела - PullRequest
0 голосов
/ 30 ноября 2018

Таблица представляет собой довольно простой пакет со списком компонентов с именем пакета в качестве ключа раздела и версией в качестве ключа сортировки.

Как видно из названия, у меня есть необходимость получить последнюю версию каждого пакета, но я не могу понять, как лучше / эффективнее всего добиться этого?

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

Я также рассмотрел возможность использования второй таблицы для хранения этой информации.

Интересуюсь другими мнениями о том, как лучше всего решить эту проблему.любые советы, как это сделать с помощью Spring-Data-Dynamo / Java, были бы хороши.

1 Ответ

0 голосов
/ 01 декабря 2018

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

Вот подвох.Вы должны убедиться, что при добавлении новой версии вы удалите атрибут из предыдущей последней версии.Это достаточно просто сделать, используя DynamoDB Streams и функцию Lambda, или вы можете использовать DynamoDB TransactWriteItems , чтобы добавить новую версию пакета в вашу таблицу одновременно с удалением атрибута изстарая версия, но вам нужно тщательно рассмотреть все случаи, когда последняя версия может измениться.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...