В динамо-таблице я хотел бы запросить, выбрав все элементы, значение атрибутов которых соответствует одному из набора значений. Например, в моей таблице есть атрибут current_status, поэтому я хотел бы, чтобы все элементы имели значение «NEW» или «ASSIGNED». Если я применяю GSI к атрибуту current_status, похоже, мне нужно сделать это в двух запросах? Или вместо этого сделать сканирование?
запрос Dynamodb для выбора всех элементов, соответствующих набору значений
Ответы (1)
DynamoDB не рекомендует использовать сканирование. Используйте его только тогда, когда другого варианта нет и у вас достаточно небольшой объем данных.
Здесь вам нужно использовать GSI. Включение current_status в PK GSI приведет к проблеме с горячим разделом.
Правильное решение - поместить случайное число в PK GSI в диапазоне от 0 до N, где N - количество разделов. И укажите статус GSI в SK вместе с отметкой времени или некоторой уникальной информацией, чтобы пара PK-SK оставалась уникальной. Поэтому, если вы хотите запросить на основе current_status, выполняйте N запросов параллельно с PK в диапазоне от 0 до N, а SK начинается с 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