Как рассчитываются единицы потребляемой емкости чтения в запросе DynamoDB

Я видел страницу на Amazon и понимаю, что 1 RCU - это элемент размером 4 КБ.

Если у меня есть таблица с 50 элементами, я читал, что сканирование прочитает полные 50 элементов и использует 50 RCU. Но допустим, я сделал запрос, моя таблица 10 на 5, будет ли она по-прежнему использовать 50 RCU?


person zuba    schedule 04.05.2018    source источник
comment
Запрос будет использовать только количество возвращенных элементов (при условии, что нет фильтра, который будет отфильтрован после чтения, а общий размер меньше 1 МБ)   -  person Can Sahin    schedule 04.05.2018


Ответы (2)


Сканирование таблицы, содержащей 50 элементов, потребует 50 RCU только в том случае, если общий размер 50 элементов в совокупности равен 200 КБ (для строго согласованного чтения или 400 КБ для возможного согласованного чтения). Большинство элементов не такие уж большие, поэтому для хранения 50 элементов обычно требуется всего около 10 КБ, то есть полное сканирование таблицы из 50 элементов с возможной согласованностью будет стоить всего около 3 RCU.

Используемые единицы емкости чтения (RCU) зависят от нескольких факторов:

Если элемент считывается с помощью операции GetItem, то счет за потребленную емкость выставляется с шагом 4 КБ в зависимости от размера элемента (т. Е. Элемент 200 и элемент 3 КБ потреблял бы 1 RCU каждый, а элемент размером 5 КБ потребляет 2 RCU)

Если вы читаете несколько элементов с помощью операции Запрос или Сканировать, то потребляемая емкость зависит от совокупного размера элементов, к которым осуществляется доступ (вам выставляется счет даже для элементов, отфильтрованных из запроса или сканирования при использовании фильтров). Таким образом, если ваш запрос или сканирование обращается к 10 элементам размером примерно 200 байт каждый, то он будет использовать только 1 RCU. Если вы читаете 10 элементов, но каждый элемент имеет размер около 5 КБ, то общая потребляемая емкость будет 13 RCU (50 КБ / 4 КБ = 12,5, округленное вверх, равно 13).

Более того, если вы в конечном итоге выполните последовательное чтение, вы можете удвоить размер на единицу емкости. Таким образом, чтение 10 элементов размером 5 КБ будет стоить всего 7 RCU.

Вы можете прочитать дополнительную информацию о пропускной способности здесь.

Несколько замечаний:

  • размер одного элемента может достигать 400 КБ, поэтому чтение элемента может занять до 100 RCU.
  • при расчете размера предмета имена атрибутов также учитываются в размере предмета, а не только их значения!
person Mike Dinescu    schedule 05.05.2018
comment
Полезное резюме. Однако мне непонятно, что означает доступ. Если я сделаю запрос на основе хеш-ключа, будет ли мой запрос обращаться только к элементам с этим ключом? Как насчет ключа сортировки? - person nagy.zsolt.hun; 13.01.2019
comment
Верный. Запрос будет обращаться только к элементам определенного хеш-ключа. - person Mike Dinescu; 13.01.2019
comment
Спасибо. Если я также установлю ограничение для ключа сортировки, будут ли доступны все элементы HashKey или только те, которые соответствуют ограничению для ключа сортировки? - person nagy.zsolt.hun; 13.01.2019
comment
Не уверен, что вы имеете в виду. Для запроса требуется хеш-ключ. Это тот хэш-ключ, к которому осуществляется доступ в этом запросе. - person Mike Dinescu; 13.01.2019
comment
Я спрашиваю о составных ключах (состоящих из хеш-ключа + ключа сортировки): у нескольких элементов может быть один и тот же хеш-ключ. При выполнении запроса, в котором я указываю хэш-ключ + ограничение для ключа сортировки (например, условие BETWEEN), к каким элементам будет осуществляться доступ? Все элементы с одним и тем же хеш-ключом или только те, которые соответствуют ограничению ключа сортировки? - person nagy.zsolt.hun; 13.01.2019
comment
Вы можете проверить это, запросив возврат потребляемой емкости в ответе на запрос, но, в сущности, элементы, возвращаемые ключевым ограничением, должны учитываться как потребляемая емкость. - person Mike Dinescu; 13.01.2019
comment
@MikeDinescu, если вы выполнили 4 быстрых запроса подряд (как это часто бывает с гео-запросами), гарантированно ли эти 4 запроса будут вычисляться индивидуально? Или они могут быть рассчитаны дважды, например, если каждый запрос поступает в DynamoDB в течение полсекунды? Другими словами, если первый и второй запросы попадут в API в течение 1 секунды, будет ли расчет RCU производиться на основе их объединенного размера элементов и рассматриваться как один вызов API? - person acidgate; 31.01.2019
comment
Это было бы лучше задать как отдельный вопрос, но TL; DR - это каждый запрос - это отдельный запрос, поэтому использование емкости оплачивается по запросу - person Mike Dinescu; 31.01.2019
comment
@MikeDinescu Хорошая идея stackoverflow.com/questions/54468374/ - person acidgate; 31.01.2019
comment
Большинство элементов не такие уж большие, поэтому для хранения 50 элементов обычно требуется всего около 10 КБ, то есть полное сканирование таблицы из 50 элементов с возможной согласованностью будет стоить всего около 3 RCU. Это действительно правильно? Согласно документам AWS, одна единица запроса на чтение представляет один строго согласованный запрос на чтение или два в конечном итоге согласованных запроса на чтение для элемента размером до 4 КБ по размеру. Нет, где в документации говорится, что емкость чтения является кумулятивной ... - person user1322092; 13.02.2019
comment
Потребляемая мощность рассчитывается для каждой операции (запроса) в зависимости от объема данных, к которым осуществляется доступ, а не для каждого элемента. Меке смысл ?! - person Mike Dinescu; 13.02.2019
comment
@ nagy.zsolt.hun Чтобы ответить на ваш вопрос, осуществляется доступ ко всем элементам с одним и тем же хеш-ключом, а затем применяется фильтр, применяемый поверх него. Потребление емкости также относится ко всем элементам, к которым осуществляется доступ, а не только к возвращенным. - person Vinay; 12.11.2019
comment
Это должно быть намного более ясно в документации ... Может быть, на странице цен - person danthegoodman; 06.12.2020

Запрос - считывает несколько элементов с одинаковым значением ключа раздела. Все возвращенные элементы обрабатываются как одна операция чтения, при которой DynamoDB вычисляет общий размер всех элементов и затем округляет их до следующей границы в 4 КБ. Например, предположим, что ваш запрос возвращает 10 элементов, общий размер которых составляет 40,8 КБ. DynamoDB округляет размер элемента для операции до 44 КБ. Если запрос возвращает 1500 элементов по 64 байта каждый, совокупный размер составляет 96 КБ.

Ссылка: https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/ProvisionedThroughput.html

person rajd    schedule 15.03.2020