Конструкция DynamoDB означает, что он не особенно хорош при возврате всех предметов.
Возврат всех предметов - это SCAN
, что, хотя и позволяет накладывать ограничения на возвращаемые предметы, составляет всегда несортированные .
Единственный способ получить отсортированный ответ - это если вы QUERY
на таблице с ключом , раздел и ключ sort .В случае, если вы можете запросить по partition
и он вернет результаты, упорядоченные по sort
(восходящий / нисходящий поддерживается).
Есть еще один вопрос, который дает более широкое обсуждение оисправления, которые вы можете сделать для сортировки сканирования, но фактически он разбивается на:
- Имеет атрибут, который установлен одинаковым в каждом элементе (назовем его
scannable
и он будет установлен в scan_me
) - Создать глобальный вторичный индекс с разделом
scannable
и отсортировать created
ключи - Запрос
scannable == "scan_me"
, и он вернет вседанные в вашей таблице (до limit
в порядке строк из created
.
Это не масштабируемое решение, но оно будет "работать" для небольшихобъемы данных. Обратите внимание, что, как указывает @ matthew-pope, ваша клавиша created
не сортирует (или, точнее, сортирует по часам, минутам, дням, месяцам и годам), что означает, что вам также необходимо заменить created
ключ с датой-секундами или ISO-строкой (так как они оба сортируются по умолчаниюt компараторов).
Наконец , если TOP N
будет для вас важным, то, вероятно, существует решение, использующее шаблон dynamodb -> dynamodb streams -> lambda -> another dynamodb table
для поддержания материализованного представления.(Этот шаблон часто является предложенным решением для поддержки более сложных «запросов» в динамо.)