Операции сканирования читают все элементы таблицы или вторичные индексы. Его функция по умолчанию возвращает все атрибуты данных всех элементов в индексе или таблице. Используйте параметр ProjectionExpression в фильтрах атрибутов.
Каждое сканирование возвращает набор результатов, даже если не найдено совпадений, что приводит к пустому набору. Сканирования извлекают не более 1 МБ с возможностью фильтрации данных.
Примечание . Параметры и фильтрация сканирования также применяются к запросам.
Типы операций сканирования
Фильтрация. Операции сканирования обеспечивают тонкую фильтрацию по выражениям фильтра, которые изменяют данные после сканирования или запросов; прежде чем возвращать результаты. В выражениях используются операторы сравнения. Их синтаксис напоминает выражения условий, за исключением ключевых атрибутов, которые выражения фильтра не допускают. Вы не можете использовать раздел или ключ сортировки в выражении фильтра.
Примечание . Ограничение в 1 МБ применяется до любого применения фильтрации.
Характеристики пропускной способности — при сканировании используется пропускная способность, однако при этом основное внимание уделяется размеру элемента, а не возвращаемым данным. Потребление остается неизменным независимо от того, запрашиваете ли вы каждый атрибут или только несколько, и использование или отсутствие выражения фильтра также не влияет на потребление.
Разбиение на страницы — DynamoDB разбивает на страницы результаты, вызывая разделение результатов на определенные страницы. Ограничение в 1 МБ применяется к возвращаемым результатам, и когда вы его превышаете, для сбора остальных данных становится необходимым другое сканирование. Значение LastEvaluatedKey позволяет выполнить это последующее сканирование. Просто примените значение к ExclusiveStartkey . Когда значение LastEvaluatedKey становится нулевым, операция завершила все страницы данных. Однако ненулевое значение не означает автоматически, что остается больше данных. Только нулевое значение указывает на статус.
Параметр предела — параметр предела управляет размером результата. DynamoDB использует его для определения количества элементов для обработки перед возвратом данных и не работает за пределами области действия. Если вы установите значение x, DynamoDB вернет первые x соответствующих элементов.
Значение LastEvaluatedKey также применяется в случаях параметров ограничения, дающих частичные результаты. Используйте его для завершения сканирования.
Счетчик результатов — Ответы на запросы и сканирования также включают информацию, относящуюся к ScannedCount и Count, которые количественно определяют отсканированные / запрошенные элементы и количественно возвращают элементы. Если вы не фильтруете, их значения идентичны. Когда вы превышаете 1 МБ, отсчеты представляют только обработанную часть.
Согласованность — результаты запросов и результаты сканирования в конечном итоге становятся согласованными, однако вы также можете установить строго согласованные чтения. Используйте параметр ConsistentRead, чтобы изменить этот параметр.
Примечание. Согласованные параметры чтения влияют на потребление, используя удвоенные единицы емкости, если настроены на строго согласованные значения.
Производительность. Запросы обеспечивают лучшую производительность, чем сканирование, поскольку при сканировании выполняется обход полной таблицы или вторичного индекса, что приводит к вялому отклику и высокому потреблению пропускной способности. Сканирование лучше всего подходит для небольших таблиц и поиска с меньшим количеством фильтров, однако вы можете разработать скудное сканирование, следуя нескольким рекомендациям, таким как избегание внезапного ускоренного чтения и использование параллельного сканирования.
Запрос находит определенный диапазон ключей, удовлетворяющих заданному условию, при этом производительность определяется количеством извлекаемых данных, а не объемом ключей. Параметры операции и количество совпадений особенно влияют на производительность.
Параллельное сканирование
Операции сканирования выполняют обработку последовательно по умолчанию. Затем они возвращают данные порциями по 1 МБ, что побуждает приложение извлечь следующую порцию. Это приводит к длинному сканированию больших таблиц и индексов.
Эта характеристика также означает, что сканирование может не всегда полностью использовать доступную пропускную способность. DynamoDB распределяет данные таблицы по нескольким разделам; и пропускная способность сканирования остается ограниченной для одного раздела из-за его операции с одним разделом.
Решение этой проблемы заключается в логическом разделении таблиц или индексов на сегменты. Затем «рабочие» параллельно (одновременно) сканируют сегменты. Он использует параметры Segment и TotalSegments, чтобы указать сегменты, сканируемые определенными работниками, и указать общее количество обработанных сегментов.
Рабочий номер
Для достижения максимальной производительности приложения вы должны поэкспериментировать с рабочими значениями (параметр Segment).
Примечание. Параллельное сканирование с большим количеством рабочих влияет на пропускную способность, возможно, потребляя всю пропускную способность. Решите эту проблему с помощью параметра Limit, который вы можете использовать, чтобы не дать одному рабочему использовать всю пропускную способность.
Ниже приведен пример глубокого сканирования.
Примечание. В следующей программе может использоваться ранее созданный источник данных. Прежде чем пытаться выполнить, приобретите вспомогательные библиотеки и создайте необходимые источники данных (таблицы с требуемыми характеристиками или другие ссылочные источники).
В этом примере также используются Eclipse IDE, файл учетных данных AWS и набор инструментов AWS в Java-проекте Eclipse AWS.