#amazon-dynamodb #dynamodb-queries #amazon-dynamodb-index
#Amazon-DynamoDB #dynamodb-запросы #amazon-DynamoDB-индекс
Вопрос:
Существует таблица DynamoDB Entity
, в которой включен хэш-ключ id
и GSI для другого атрибута : cardId
. GSI имеет только ключ диапазона и не имеет никакого ключа сортировки.
Всякий раз, когда мы получаем пакет запросов на создание / обновление, мы сначала используем GSI для чтения существующих данных, а затем записываем основную таблицу, которая в конечном итоге также обновляет таблицу GSI. В течение этого времени мы также можем обслуживать некоторые параллельные запросы на чтение из GSI.
Мы наблюдаем проблему, из-за которой задержка как основной таблицы, так и таблицы GSI увеличивается с 200 мс до 10-15 секунд за это время (пакетная запись чтение). Я не могу установить взаимосвязь между последовательными операциями чтения и записи в таблице. Таблица настроена на использование емкости по требованию, и регулирование отсутствует. «SuccessfulRequestLatency» составляет всего ~ 300-400 мс.
Это метод клиента DDB, который имеет задержку в секундах. Он не выполняет никаких преобразований данных, просто возвращает данные БД как есть на верхние уровни. Что-нибудь еще, что я должен отслеживать, чтобы добраться до основной причины этого?
Спасибо!
Ответ №1:
У меня нет полного ответа, но есть несколько указаний, которые вы, возможно, захотите изучить.
Во-первых, я заметил в прошлом, что чрезвычайно длительные задержки могут указывать на то, что ваш клиент отказался и повторил запрос. Некоторые клиенты скрывают эту повторную попытку, и со стороны это выглядит как очень медленный запрос.
Во-вторых, вы правы в том, что режим выставления счетов по требованию не регулируется в зависимости от выделенной пропускной способности, но, тем не менее, он может регулировать — см. https://aws.amazon.com/premiumsupport/knowledge-center/on-demand-table-throttling-dynamodb /. По умолчанию существуют ограничения на пропускную способность, которую может иметь таблица по требованию, а также на то, как быстро может расти пропускная способность. Эти ограничения, по крайней мере частично, предназначены для вашей защиты — вы же не хотите, чтобы приложение с запущенным обучением случайно выполняло миллиарды запросов и стоило вам миллион долларов 🙂