Стоимость считывания емкости таблицы сканирования DynamoDB
Для меня непонятно, после прочтения документов, сколько единиц емкости чтения потребляется во время операции сканирования с фильтром в DynamoDB. Например, с этим запросом ruby:
table.items.where(:MyAttribute => "Some Value").each do |item_data|
# do something with the item_data
end
Насколько я понимаю, это приведет к сканированию таблицы, но DynamoDB вернет только те элементы, которые мне интересны. Но если в моей таблице 10000 элементов, и только 5 из них - то, что проходит через мой фильтр, я все еще "заряжается" за огромное количество единиц считываемой емкости?
Атрибут, который я использую для фильтра, не является хешем, диапазоном или вторичным индексом. Мне только что пришлось добавить этот атрибут недавно и неожиданно, поэтому вместо этого я не использую запрос.
1 ответ
Короче говоря, вы будете "платить" за общее количество отсканированных предметов (не за общее количество возвращенных предметов). Сканирование по сравнению с запросом (как вы уже упоминали) является дорогостоящей операцией.
Стоит упомянуть тот факт, что когда вы запускаете сканирование таблицы, это не означает, что будет сканироваться вся таблица. Если размер отсканированных элементов превышает ограничение в 1 МБ, сканирование останавливается, и вам необходимо снова вызвать его для сканирования следующей части таблицы.
Это взято из официальных документов:
Если общее количество отсканированных элементов превышает максимально допустимый размер набора данных, равный 1 МБ, сканирование останавливается, и результаты возвращаются пользователю в виде значения LastEvaluatedKey для продолжения сканирования в последующей операции. Результаты также включают количество предметов, превышающих лимит. Сканирование может привести к тому, что никакие данные таблицы не будут соответствовать критериям фильтра.
Фильтр применяется после сканирования найденных элементов, поэтому он не влияет на пропускную способность вообще.
Если вы собираетесь выполнять эти операции регулярно, возможно, стоит подумать о добавлении некоторых вторичных индексов или оптимизации ключей хеша и диапазона.