Когда и как Dynamodb GSI имеет разделительный ключ и ключ сортировки?

  1. Когда и как Dynamodb GSI имеет разделительный ключ и ключ сортировки?
  2. Есть ли ограничение на максимальный размер разделов GSI, таких как разделы таблицы?
  3. Если да, то что произойдет, когда однокординальный GSI (т.е. GSI, имеющий один и тот же ключ раздела для всех записей) превысит лимит хранилища?

person lalatnayak    schedule 06.10.2018    source источник


Ответы (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 КБ). Это возможный сценарий для вас?

person F_SO_K    schedule 11.10.2018
comment
Почему расчет 10GB / 4KB? разве максимальный размер элемента не 400 КБ? в этом случае будет только 25000 элементов, чтобы достичь предела хранения раздела, но это будет в случае, если вы проецируете все данные в GSI, я думаю, это правильно? - person raspacorp; 23.01.2020
comment
Да, я думаю, это правильно. Я предполагал наименьший размер элемента, и, конечно же, таблица будет разделена на меньшее количество элементов, когда они будут большими. Так что я думаю, что 25 000 - это наименьшее количество элементов, которые вызовут создание нового раздела .. - person F_SO_K; 24.01.2020
comment
Отличный ответ @F_SO_K Мне также любопытно узнать окончательный ответ для 3. - person jellycsc; 06.08.2020
comment
Я думаю, что (2) ошибочен: ограничение в 10 ГБ применяется только к разделам LSI (если я не ошибаюсь). GSI и разделы таблиц безграничны. - person Lawrence Wagerfield; 10.11.2020
comment
Вы говорите о том, существует ли ограничение на количество элементов в разделе (которого нет). Эти вопросы и ответы посвящены разделам. Взгляните на ответ, на который я дал ссылку, и вы найдете подробное его объяснение в AWS. - person F_SO_K; 10.11.2020

Если да, то что произойдет, когда однокординальный GSI (т.е. GSI, имеющий один и тот же ключ раздела для всех записей) превысит лимит хранилища?

Раздел DynamoDB может обрабатывать только 1000 WCU в секунду. Кроме того, DDB допускает только 400 WCU на запись. Если ваш GSI превышает WCU, запись в основную таблицу также регулируется. Итак, если ваши записи составляют около 400 КБ, частота запросов около 2,5 может привести к поломке вашего раздела.

person Ayan    schedule 01.10.2020

  1. Да, это работает так же, как и разделение таблицы.
  2. Да, по 10 ГБ на раздел, тоже самое, что и для самой таблицы.
  3. Поведение точно такое же, как и для основной таблицы. Dynamo начнет распределять данные между разделами с помощью ключа сортировки, т.е. ничего особенного не происходит.

Вот хороший пост в блоге, объясняющий, как работает разбиение: https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/

Все элементы с одним и тем же ключом раздела хранятся вместе, а для составных ключей раздела упорядочиваются по значению ключа сортировки. DynamoDB разбивает разделы по ключу сортировки, если размер коллекции превышает 10 ГБ.

person Sergii Sopin    schedule 21.03.2021