Индекс DyanmoDB не заполняется и не работает в запросе Appsync - PullRequest
0 голосов
/ 07 марта 2019

Я добавил индекс в свою таблицу DynamoDB, чтобы упорядочить результаты, но, похоже, он ничего не делает.На панели инструментов DyanmoDB отображается 0 размеров и 0 элементов.

enter image description here

В таблице несколько сотен элементов, и все они имеют идентификатор (первичный ключ) и созданное значение.Я не установил свойство диапазона при создании таблицы.Элементы на рисунке ниже расположены в правильном порядке, но ответ через appsync - нет.

enter image description here

Я добавил индекс в запрос, который возвращаетвсе элементы, и он, кажется, ничего не делает, порядок элементов одинаков с индексом или без него:

"version" : "2017-02-28",
"operation" : "Scan",
"index" : "id-created-index",
"limit": $util.defaultIfNull(${ctx.args.limit}, 20),
"nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))

Чего мне не хватает?Индекс не был построен или есть что-то еще, что мне нужно сделать, чтобы использовать его в запросе?

Обновление: индекс теперь показывает правильный item_count, хотя он все еще не упорядочивает результаты:

enter image description here

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Операции сканирования таблицы или индекса возвращают результаты в случайном порядке.Для сортировки результатов, поступающих из DynamoDB, вам нужно запустить операцию Query, в которой ключ раздела / хеша фиксирован, а результаты будут отсортированы в соответствии с ключом сортировки.Однако, поскольку у вашей таблицы / GSI всегда есть уникальные идентификаторы, в одном разделе нет дополнительных записей (идентификатора).

Так что да, если вы хотите, чтобы результаты упорядочивались по created, вам нужно было бы иметь фиксированный атрибут в вашей таблице, установленный в качестве ключа разделения для вашего индекса.Предостережение в том, что все ваши записи в индексе будут принадлежать одному разделу, что будет узким местом.Есть несколько способов обойти это;Одним из способов было бы проверить, существует ли другой шаблон доступа, в котором вы можете сохранить другой атрибут фиксированным для запроса (т. е. owner_id).Если количество записей достаточно мало, фильтрация на стороне клиента, вероятно, является наилучшим вариантом.

0 голосов
/ 07 марта 2019

Ваша базовая таблица имеет ключ разделения id и не имеет ключа сортировки.По определению это означает, что каждый элемент в вашей таблице имеет уникальный id.

. Ваш GSI имеет ключ разделения id и ключ сортировки created.Данные сортируются по созданному атрибуту в каждом ключе раздела .Поскольку каждый из ваших идентификаторов уникален, ключ сортировки практически ничего не делает.

...