Опрос DynamoDB в отсортированном порядке - PullRequest
0 голосов
/ 21 ноября 2018

Я новичок в Динамодб.Я хочу запросить все записи из Dynamodb вместе с нумерацией страниц.Поэтому я хочу только 100 записей последних строк.В моей таблице у меня есть created данные, которые содержат date and time.Если я создаю GSI для created, то я должен предоставить ключ раздела в качестве текущей даты или любой другой даты.Но я не знаю время, которое присутствует в таблице.Есть ли другой способ сделать нумерацию страниц?

Структура таблицы:

---------------------------------------------
|id    |    created      |   action_type    |
---------------------------------------------
|hash  | 21:22 20/10/2018|   some_type      |
|hash  | 10:12 10/11/2018|   some_type      |

1 Ответ

0 голосов
/ 22 ноября 2018

Конструкция 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 для поддержания материализованного представления.(Этот шаблон часто является предложенным решением для поддержки более сложных «запросов» в динамо.)

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