В DynamoDB, как извлечь некоторые данные с несколькими условиями (упорядочить по и ограничить) - PullRequest
0 голосов
/ 15 января 2020

Я хотел бы получить некоторую помощь, чтобы выяснить, как получить некоторые данные для удовлетворения нескольких условий из DynamoDB. Вот ситуация, с которой я столкнулся.

Данные:

| рк | ск | c1 |

| 1 | 1 | a |

| 1 | 2 | b |

| 1 | 3 | b |

| 1 | 4 | a |

| 1 | 5 | а | ...

Приложение: Мое приложение будет извлекать последние 2 строки (элементы), и оно должно иметь значение c, равное c1. Это может express как SQL, например:

select * from TABLE where pk=1 and c1=b order by sk limit 2;

Проблема заключается в том, что DynamoDB работает подобно извлечению данных до числа «предел» и затем отражает условия. У меня есть много строк, которые имеют один и тот же PK, поэтому трудно просто использовать метод нумерации страниц из-за неэффективности. Вы знаете, что они будут использовать единицу емкости = мои деньги.

Я ищу дополнительный механизм, такой как Cache, Enhanced Data Model или что-то еще, чтобы справиться с этим. Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Спасибо за ответ.

Если вы не возражаете, я могу спросить немного дополнительно. Как насчет в случае нескольких условий для c1?

, например:

| рк | ск | c1 |

| 1 | 1 | a |

| 1 | 2 | b |

| 1 | 3 | c |

select * from TABLE where pk=1 and c1 in (b,c) order by sk limit 2;

У меня практически нет проблем в этом деле. Если бы инвертированный индекс (GSI, LSI ...) использовал c1, он не соответствовал бы ожиданиям. Это потому, что DynamoDB не может использовать несколько первичных ключей при выполнении запроса в моем понимании.

Я ожидаю, что приведенный выше случай: получение 2 строк = (1,2, b), (1,3, c )

В DynamoDB, однако: 1 строка (1,2, b)

0 голосов
/ 15 января 2020

Это то, для чего предназначены вторичные индексы ...

Либо локальный вторичный индекс (LSI), с тем же ключом ha sh, что и в таблице, но с ключом сортировки C1. Или глобальный вторичный индекс (GSI) с другим ключом ha sh, возможно, C1 как ключ ha sh.

Вместо того, чтобы запрашивать таблицу, вы запрашиваете индекс.

Обратите внимание, что GSI в основном представляет собой отдельную таблицу DDB, поддерживаемую системой, со своими собственными RCU / WCU и затратами на хранение.

...