- Когда и как Dynamodb GSI имеет разделительный ключ и ключ сортировки?
- Есть ли ограничение на максимальный размер разделов GSI, таких как разделы таблицы?
- Если да, то что произойдет, когда однокординальный GSI (т.е. GSI, имеющий один и тот же ключ раздела для всех записей) превысит лимит хранилища?
Когда и как Dynamodb GSI имеет разделительный ключ и ключ сортировки?
Ответы (3)
1) См. Мой ответ здесь, https://stackoverflow.com/a/51240423/4985580, чтобы узнать, как разбиваются таблицы. GSI - это, по сути, просто новая таблица, она разбита на разделы так же, как и ваша базовая таблица.
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html
Глобальные вторичные индексы в DynamoDB также состоят из разделов. Данные в GSI хранятся отдельно от данных в его базовой таблице, но разделы индекса ведут себя во многом так же, как разделы таблицы.
2) Да, 10 ГБ
3) Это интересный вопрос, на который у меня нет ответа. Dynamo получает доступ к правильному разделу на основе ключа раздела данных, поэтому, если вы заполните более одного раздела одним ключом раздела, вероятно, у вас возникнет проблема. Тем не менее, для этого вам, вероятно, понадобится как минимум 2,5 миллиона элементов с одним и тем же ключом раздела (10 ГБ / 4 КБ). Это возможный сценарий для вас?
Если да, то что произойдет, когда однокординальный GSI (т.е. GSI, имеющий один и тот же ключ раздела для всех записей) превысит лимит хранилища?
Раздел DynamoDB может обрабатывать только 1000 WCU в секунду. Кроме того, DDB допускает только 400 WCU на запись. Если ваш GSI превышает WCU, запись в основную таблицу также регулируется. Итак, если ваши записи составляют около 400 КБ, частота запросов около 2,5 может привести к поломке вашего раздела.
- Да, это работает так же, как и разделение таблицы.
- Да, по 10 ГБ на раздел, тоже самое, что и для самой таблицы.
- Поведение точно такое же, как и для основной таблицы. Dynamo начнет распределять данные между разделами с помощью ключа сортировки, т.е. ничего особенного не происходит.
Вот хороший пост в блоге, объясняющий, как работает разбиение: https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/
Все элементы с одним и тем же ключом раздела хранятся вместе, а для составных ключей раздела упорядочиваются по значению ключа сортировки. DynamoDB разбивает разделы по ключу сортировки, если размер коллекции превышает 10 ГБ.