Как запросить более двух атрибутов в DynamoDB с помощью GSI? - PullRequest
0 голосов
/ 21 июня 2020

У меня есть вариант использования, когда мне нужно запросить более двух атрибутов в таблице DynamoDB. Насколько мне известно, с помощью GSI мы можем запрашивать только до двух атрибутов (ключ раздела, ключ сортировки) в таблице DDB. есть ли что-нибудь, что позволяет нам запрашивать несколько атрибутов (например, invoiceId, clientId, invoiceStatus) с помощью GSI.

1 Ответ

1 голос
/ 21 июня 2020

Да, это возможно, но вам нужно принять во внимание каждый шаблон доступа, который вы хотите поддерживать, при разработке своей таблицы.

Этот topi c обсуждался на re: Invent несколько раз. Вот видео за несколько лет go https://youtu.be/HaEPXoXVf2k?t=2102, но подобные разговоры проводились на topi c каждый год.

Два основных варианта: использование составных клавиш или фильтры запросов.

Составные ключи очень эффективны и сводятся к созданию новых ключей syntheti c, которые просто объединяют другие поля, которые у вас есть в вашей записи, а затем используют их в вашем GSI.

Например, если у вас есть клиент, которому вы хотите получить все открытые счета-фактуры, но при этом хотите получить отдельный счет, вы можете использовать clientId в качестве ключа раздела и объединить invoiceStatus и invoiceId вместе как ключ сортировки. Затем вы можете использовать begin_with, чтобы возвращать только определенный статус счета. В этом примере вы должны знать invoiceStatus и invoiceId, что делает его не лучшим примером.

Шаблон составного ключа также полезен для дат, поскольку вы можете использовать больше или меньше, чем для поиска в определенных временные диапазоны. Однако также можно напрямую получить записи с помощью конкатенации.

Альтернативный вариант - использование фильтров запросов. Это менее эффективно, поскольку DynamoDB придется сканировать каждую запись, которая соответствует разделу и ключу сортировки. Однако фильтр можно применить к любому атрибуту и ​​уменьшить объем данных, передаваемых из DynamoDB в ваше приложение. Это полезно, когда ваши основные ключи в основном избирательны, но возможны множественные совпадения, и фильтр поможет вам до конца.

Другой аспект использования GSI, который может помочь снизить затраты, - это проецирование только атрибуты, которые вам небезразличны. Когда запись обновляется, GSI обновляется только в том случае, если обновляется один из прогнозируемых атрибутов. Удерживая GSI тонким, он делает ранее перечисленные стратегии более экономичными.

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