Как запросить глобальный вторичный индекс DynamoDB через несколько шардов? - PullRequest
0 голосов
/ 04 января 2019

В этой статье (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-gsi-sharding.html) рассказывается о методике разделения глобальных вторичных индексов по нескольким разделам путем введения случайного целого числа в качестве ключа раздела.

Это имеет смысл для меня, но статья не дает четкого объяснения, как затем запрашивать этот индекс. Допустим, я использую случайное целое число от 1 до 10 в качестве ключа раздела и число в качестве ключа сортировки, и я хочу получить 3 записи с наибольшим значением ключа сортировки (из всех разделов).

Нужно ли мне сделать 10 отдельных запросов, отсортировав каждый из них с ограничением в 3 элемента, затем выполнить сортировку в памяти полученных 30 элементов и выбрать первые 3? Это кажется излишне сложным и не очень эффективным для клиента.

Есть ли какой-нибудь способ сделать одну операцию DynamoDB, которая запрашивает все 10 разделов, выполняет сортировку и просто возвращает 3 записи с наибольшим значением vavlue?

1 Ответ

0 голосов
/ 04 января 2019

Нужно ли мне сделать 10 отдельных запросов

Да. Это называется разброс чтения в документах Динамо ...

Обычно клиент делает это с несколькими потоками ... поэтому, хотя это добавляет сложности, эффективность обычно хорошая.

Почему предел 3? Это требование, по-видимому, является основной причиной неэффективности.

Есть ли какой-нибудь способ выполнить одну операцию DynamoDB, которая запрашивает все 10 разделов, выполняет сортировку и просто возвращает 3 записи с наибольшим значением vavlue?

Единственный способ запросить все разделы - заполнить таблицу Scan. Но это не обеспечивает сортировку и заказ. Вам все еще нужно сделать это в вашем приложении. Сканирование будет намного менее эффективным, чем разброс чтения .

Если это список типа «Топ-3 продавца» ... Я считаю, что рекомендуется (периодически) рассчитывать и сохранять результаты. Вместо того, чтобы постоянно получать результаты. Посмотрите здесь: Использование глобальных вторичных индексов для материализованных запросов агрегации

...