Сканирование или параллельное сканирование в AWS DynamoDB?

В системе облачного хранения AWS пользуется большим спросом. Процесс сканирования нужно еще быстрее. Так как же работает процесс сканирования и какой из них (сканирование/параллельное сканирование) лучше в какой ситуации?

  1. Как работает сканирование в AWS DynamoDB?
  2. Как работает параллельное сканирование в AWS DynamoDB?
  3. Сканирование или параллельное сканирование в AWS DyanmoDB?
  4. Когда параллельное сканирование будет предпочтительным?
  5. Применяется ли выражение фильтра перед сканированием?

person SkyWalker    schedule 21.12.2016    source источник
comment
Это хороший вопрос   -  person nik    schedule 11.03.2017


Ответы (2)


<сильный>1. Как работает сканирование в AWS DynamoDB?

Ответ:

i) Операция сканирования возвращает один или несколько элементов.

ii) По умолчанию операции сканирования выполняются последовательно.

iii) По умолчанию Scan использует в конечном счете согласованные операции чтения при доступе к данным в таблице.

iv) Если общее количество отсканированных элементов превышает максимальный размер набора данных, равный 1 МБ, сканирование останавливается, и результаты возвращаются пользователю в виде значения LastEvaluatedKey для продолжения сканирования в последующей операции.

v) Операция сканирования по умолчанию выполняет последовательное чтение и может возвращать до 1 МБ (одну страницу) данных. Таким образом, один запрос на сканирование может потреблять

(1 MB page size / 4 KB item size) / 2 (eventually consistent reads) = 128 read operations.

<сильный>2. Как работает параллельное сканирование в AWS DynamoDB?

Ответ:

i) Для повышения производительности при работе с большой таблицей или вторичным индексом приложения могут запрашивать операцию параллельного сканирования.

ii) Вы можете запускать несколько рабочих потоков или процессов параллельно. Каждый воркер сможет сканировать отдельный сегмент таблицы одновременно с другими воркерами. Функция сканирования DynamoDB теперь принимает два дополнительных параметра:

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

iii) При совместном использовании этих двух параметров сканирование ограничивается определенным блоком элементов в таблице. Вы также можете использовать существующий параметр Limit, чтобы контролировать объем данных, возвращаемых отдельным запросом на сканирование.

<сильный>3. Сканирование или параллельное сканирование в AWS DyanmoDB?

Ответ:

i) Операция сканирования может считывать только один раздел за раз. Таким образом, параллельное сканирование необходимо для более быстрого чтения нескольких разделов одновременно.

ii) Последовательное сканирование не всегда может полностью использовать предоставленную пропускную способность чтения. Так что там нужно параллельное сканирование.

iii) Параллельное сканирование: сократите свои расходы до 4 раз для определенных типов запросов и сканирований.

<сильный>4. Когда параллельное сканирование будет предпочтительным?

Ответ:

Параллельное сканирование может быть правильным выбором, если выполняются следующие условия:

  • Размер таблицы составляет 20 ГБ или больше.

  • Предоставленная пропускная способность чтения таблицы используется не полностью.

  • Операции последовательного сканирования выполняются слишком медленно.

<сильный>5. Применяется ли выражение фильтра перед сканированием?

Ответ: Нет, выражение FilterExpression применяется после того, как элементы уже прочитаны; процесс фильтрации не потребляет никаких дополнительных единиц емкости чтения.

Ссылка на ресурс:

  1. Сканировать

  2. Параллельное сканирование

  3. Пример — параллельное сканирование с использованием Java

  4. Amazon DynamoDB — параллельное сканирование, в 4 раза дешевле Читает, другие хорошие новости

  5. Избегайте внезапных всплесков чтения

person SkyWalker    schedule 21.12.2016
comment
Параллельное сканирование не в 4 раза дешевле. Это была еще одна функция, запущенная одновременно с параллельным сканированием. aws.amazon.com/blogs /aws/ - person emilyk; 21.07.2017
comment
@emilyk Спасибо, что указали. Ты прав. Это фактически снижает стоимость до 4x - person SkyWalker; 21.07.2017
comment
@SkyWalker Это утверждение неверно. На самом деле оно снижает стоимость до 4 раз. Параллельное сканирование помогает вам быстрее сканировать таблицу DynamoDB, и это также зависит от количества определенных вами рабочих/сегментов. Вы по-прежнему платите ту же стоимость - person user1188611; 26.01.2018

Решение вопроса о том, когда параллельное сканирование следует использовать вместо обычного сканирования...

По моему опыту, параллельное сканирование выполняется быстрее, чем обычное, если объем данных в таблице превышает 2 МБ, и, грубо говоря, вы оптимизируете производительность, запуская один сегмент на каждый 1 МБ данных в таблице.

У меня есть три таблицы, каждая с подготовкой по требованию. Крошечная таблица, содержащая 300 элементов и 70 КБ данных. Небольшая таблица, содержащая 1800 элементов и 4 МБ данных. И большая таблица, содержащая 1,1 миллиона элементов и 1,05 ГБ данных.

Я могу рассчитать время обычного сканирования, поместив эту команду в сценарий оболочки с именем scan.sh.

aws dynamodb scan --table-name MyTable --select COUNT

А затем выполнить

time scan.sh

Я могу рассчитать время параллельного сканирования, заменив команду в сценарии оболочки на

aws dynamodb scan --table-name MyTable --total-segments 4 --segment 0 --select COUNT

Приведенная выше команда запускает сканирование в 4 сегментах и ​​выполняет только один из 4 сегментов. Я использую DynamoDBMapper (Java SDK) в своем приложении, и SDK заботится о параллельном запуске различных потоков.

На моем крошечном столе каждое сканирование занимало 1,4 секунды, и параллельное сканирование не имело значения. На моем маленьком столе обычное сканирование занимало 1,8 с, а параллельное сканирование было оптимальным с 4 сегментами и выполнялось за 1,4 с.

Интересным результатом стала большая таблица. Вот время для выполнения сканирования, основанное на количестве сегментов в параллельном сканировании:

  • 1 сегмент - 120 секунд
  • 4 сегмента по 30 секунд
  • 8 сегментов по 15 секунд
  • 16 сегментов по 8 секунд
  • 32 сегмента по 5 секунд
  • 64 сегмента по 3 секунды
  • 128 сегментов 1,9 с
  • 256 сегментов 1,6 с
  • 512 сегментов - 1,4 с
  • 1024 сегмента - 1,4 с
person F_SO_K    schedule 15.01.2020