правильно ли использовать операцию сканирования DynamoDB с нумерацией страниц вместо запроса с помощью GSI, мне нужны все элементы из таблицы

#pagination #amazon-dynamodb #dynamodb-queries #amazon-dynamodb-index

#разбивка на страницы #amazon-dynamodb #dynamodb-запросы #amazon-dynamodb-index

Вопрос:

Я читал, что операция сканирования dynamo db выполняется медленно, когда данные большие. но я хочу это знать, имея сценарий для извлечения всех элементов. По-прежнему ли предпочтительнее избегать сканирования? учитывая, что индексы не являются бесплатными, и мне нужны все элементы из таблицы, я придерживаюсь этого подхода.

  1. Пожалуйста, предложите, есть ли у них какие-либо проблемы, выбрав операцию сканирования?
  2. почему только сканирование имеет опцию параллельного сканирования, запрос параллелен по умолчанию?
  3. если я использую операцию запроса с нумерацией страниц, будет ли она выполняться последовательно или параллельно?

Ответ №1:

Если вам нужны все элементы, то Scan() отлично подходит.

Просто поймите, что DDB

  • за раз возвращается только 1 МБ данных, поэтому вам нужно будет вызывать цикл, используя ExclusiveStartKey : = LastEvaluatedKey
  • Scan() может быстро использовать ваш подготовленный RCU, поэтому следите за ошибками дроссельной заслонки и повторите попытку.

Рекомендация против Scan() заключается в попытке использовать Scan() filter вместо Query() для подмножества записей. Scan() всегда считывает полную таблицу.

Также обратите внимание, что с точки зрения производительности Scan() поддерживает параллельное сканирование.

TotalSegments
Для запроса параллельного сканирования TotalSegments представляет общее количество сегментов, на которые будет разделена операция сканирования. Значение TotalSegments соответствует количеству рабочих приложений, которые будут выполнять параллельное сканирование. Например, если вы хотите использовать четыре потока приложения для сканирования таблицы или индекса, укажите значение TotalSegments равное 4.

Но опять же, если использовать подготовленные чтения … параллельное сканирование быстро израсходует RCU.

Комментарии:

1. Большое спасибо за ответ, Чарльз. Можете ли вы помочь мне, поделившись примером использования параллельного сканирования в лямбда-функции с использованием node js?

2. Если я использую запрос с помощью GSI, будут ли у него проблемы с производительностью при увеличении таблицы?

3. Запрос может одновременно получать доступ только к данным из одного раздела. Если вам нужны все элементы, scan — правильное решение.