запрос DynamodB, чтобы выбрать все элементы, которые соответствуют набору значений - PullRequest
0 голосов
/ 15 апреля 2019

В динамической таблице я хотел бы сделать запрос, выбрав все элементы, где значение атрибута соответствует одному из набора значений.Например, моя таблица имеет атрибут current_status, поэтому я хотел бы, чтобы все элементы имели значение «NEW» или «ASSIGNED».Если я применяю GSI к атрибуту current_status, похоже, я должен сделать это в двух запросах?Или вместо этого сделать сканирование?

1 Ответ

0 голосов
/ 16 апреля 2019

DynamoDB не рекомендует использовать сканирование.Используйте его только тогда, когда нет другого выбора и у вас достаточно маленький объем данных.

Вам необходимо использовать GSI здесь.Помещение current_status в PK GSI приведет к проблеме «горячих» разделов.

Правильное решение - поместить случайное число в PK GSI в диапазоне от 0..N, где N - количество разделов.И поместите статус в SK GSI вместе с меткой времени или некоторой уникальной информацией, чтобы сохранить уникальную пару PK-SK.Поэтому, если вы хотите делать запросы на основе current_status, выполняйте N запросов параллельно с PK в диапазоне от 0..N и SK начинается_with current_status.N следует выбирать исходя из количества данных, которые у вас есть.Если данные в каждой строке меньше 4 КБ, тогда эта операция параллельного запроса потребует N единиц чтения без проблем с горячими разделами.Ниже ссылка предоставляет подробную информацию об этом

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-gsi-sharding.html https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html

...