Как DynamoDB потребляет емкость при обновлении элемента в таблицах? - PullRequest
1 голос
/ 24 февраля 2020

недавно я использовал DynamoDB для создания некоторого API.

В таблице с именем pl anet есть атрибут в виде Список карт (массив объектов) . По сути, атрибут выглядит следующим образом. Я называю это buildingMap, поскольку это карта множества зданий.

[
  {
    id: 'some id',
    status: 'processing',
    ...
  },
  {
    id: 'other id',
    status: 'done',
    ...
  }
]

Первоначально я указываю на индекс и напрямую обновляю этот объект в массиве, как при использовании такого типа UpdateExpression.

REMOVE buildingMap[2]

или UpdateExpression, как это

SET buildingMap[0].#status = :status

И я думал, что это заставит DynamoDB потреблять меньше емкости, чем если бы я взял * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * * ". ConsumedCapacity для обоих методов, и он был абсолютно одинаковым!

Может кто-нибудь помочь мне ответить, как DynamoDB действительно вычисляет Емкость записи & Чтение емкости при обновлении элемента в таблицах?

Я имею в виду, если я просто обновляю одну карту в списке, почему она потребляет такую ​​же емкость, как если бы я перезаписывала весь список карт?

Кроме того, когда я выбираю вернуть ALL_NEW для обновления, это st плохо потребляет ту же емкость, что и когда я решаю вернуть UPDATED_NEW. Но я думал, что при выборе возврата ALL_NEW будет потребляться больше Емкость чтения , чем UPDATED_NEW?

1 Ответ

0 голосов
/ 24 февраля 2020

Чтобы изменить элемент, DynamoDB внутренне необходимо прочитать весь элемент, изменить его и записать обратно на диск, чтобы вы заплатили за весь элемент, а не за небольшую часть, которую вы изменили.

Кроме того, запись в DynamoDB значительно дороже, чем чтение, и их цена уже включает в себя (строго согласованное) чтение: вы не платите дополнительно, если у вас есть выражения условий или какая-либо опция ReturnValues ​​(но учтите, что даже если выражение условия привело к тому, что запись не была выполнена, вы все равно платите за нее).

Вот некоторые соответствующие цитаты из официальной документации:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html

UpdateItem - изменяет один элемент в таблице. DynamoDB учитывает размер элемента так, как он выглядит до и после обновления. Предоставленная пропускная способность отражает больший размер этих элементов. Даже если вы обновите только подмножество атрибутов элемента, UpdateItem по-прежнему будет использовать полную пропускную способность (большую из размеров элементов «до» и «после»).

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html#DDB -UpdateItem-request-ReturnValues ​​

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...